Skip to content

Commit 9056c37

Browse files
committed
[fix] Serial number stored in DB now matches certificate serial number #121
Fixes #121
1 parent fc872b8 commit 9056c37

File tree

2 files changed

+10
-0
lines changed

2 files changed

+10
-0
lines changed

django_x509/base/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,7 @@ def _generate(self):
339339
digest_alg = HASH_MAP.get(digest_name, hashes.SHA256)()
340340
cert = builder.sign(signing_key, digest_alg)
341341
self.certificate = cert.public_bytes(serialization.Encoding.PEM).decode("utf-8")
342+
self.serial_number = str(cert.serial_number)
342343
encryption = (
343344
serialization.BestAvailableEncryption(self.passphrase.encode("utf-8"))
344345
if self.passphrase

django_x509/tests/test_cert.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,15 @@ def test_create_old_serial_certificate(self):
439439
x509_obj = cert.x509
440440
self.assertEqual(x509_obj.serial_number, 3)
441441

442+
def test_serial_number_db_matches_certificate(self):
443+
cert = self._create_cert()
444+
cert.refresh_from_db()
445+
# The serial number in the X.509 certificate is encoded as a big-endian
446+
# hex integer in the DER structure. Convert it to int and verify it
447+
# exactly equals the value stored in the database.
448+
cert_serial_hex = format(cert.x509.serial_number, "x")
449+
self.assertEqual(int(cert_serial_hex, 16), int(cert.serial_number))
450+
442451
def test_bad_serial_number_cert(self):
443452
try:
444453
self._create_cert(serial_number="notIntegers")

0 commit comments

Comments
 (0)