Skip to content

Commit 961718f

Browse files
committed
feat: x509 chain gen print key type
1 parent 8a497e9 commit 961718f

File tree

2 files changed

+64
-83
lines changed

2 files changed

+64
-83
lines changed

docs/en/trust.rst

Lines changed: 52 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -810,15 +810,19 @@ Below a non-normative example in plain text (OpenSSL format) of an X.509 Certifi
810810
Certificate:
811811
Data:
812812
Version: 3 (0x2)
813-
Serial Number: 608272730246993755169238192525892220352984983786 (0x6a8be47f69567ad86d9f286a009f8ba9e71f28ea)
813+
Serial Number: 397755750054563149085811195816364992003765111158 (0x45abfc14fd94cf199958cb7902c26e649fe70976)
814814
Signature Algorithm: sha256
815815
Issuer: commonName=https://intermediate.example.net, organizationName=Example INT, countryName=IT
816816
Validity
817817
Not Before: May 26 15:30:02 2025 GMT
818818
Not After : May 27 15:30:02 2026 GMT
819819
Subject: commonName=CN=leaf.example.com, O=Example Leaf, C=IT, organizationName=Example Leaf, countryName=IT
820820
Subject Public Key Info:
821-
Public Key Algorithm: (unknown)
821+
Public Key Algorithm: id-ecPublicKey (EC)
822+
Public-Key: (256 bit)
823+
Curve: secp256r1
824+
X: 57001993775601218875763511862023462520415739753614377133024681491403286198246
825+
Y: 97976491537203151608498706457248143514060017039214813111267294479310061119000
822826
X509v3 extensions:
823827
X509v3 Basic Constraints:
824828
CA:TRUE, pathlen:0
@@ -843,43 +847,47 @@ Below a non-normative example in plain text (OpenSSL format) of an X.509 Certifi
843847
DNS.6=example.net
844848
845849
Signature Algorithm: sha256
846-
30:46:02:21:00:e8:99:36:e9:4d:3c:35:57:61:37:87
847-
9a:45:bb:e6:68:13:b7:99:94:9c:82:91:69:33:a5:1e
848-
10:8a:58:03:e0:02:21:00:8d:7b:51:28:b5:85:5d:15
849-
78:76:18:e0:22:bb:f1:dc:2e:16:e4:f0:c2:17:ee:58
850-
94:9c:2e:a5:51:e7:5c:6b
850+
30:46:02:21:00:b9:b6:b3:75:f1:6d:1f:a7:a7:30:c9
851+
bc:28:be:d6:1d:2a:71:af:3b:82:5a:e1:90:53:7a:c3
852+
ec:34:63:57:30:02:21:00:f6:f7:4b:9f:c8:08:36:fc
853+
a4:84:16:32:48:ee:59:ce:e1:54:a9:2e:65:5b:0e:26
854+
36:f0:b2:6d:28:96:09:37
851855
852856
-----BEGIN CERTIFICATE-----
853-
MIIC6zCCApCgAwIBAgIUaovkf2lWethtnyhqAJ+LqecfKOowCgYIKoZIzj0EAwIw
857+
MIIC6zCCApCgAwIBAgIURav8FP2UzxmZWMt5AsJuZJ/nCXYwCgYIKoZIzj0EAwIw
854858
TjEpMCcGA1UEAwwgaHR0cHM6Ly9pbnRlcm1lZGlhdGUuZXhhbXBsZS5uZXQxFDAS
855859
BgNVBAoMC0V4YW1wbGUgSU5UMQswCQYDVQQGEwJJVDAeFw0yNTA1MjYxNTMwMDJa
856860
Fw0yNjA1MjcxNTMwMDJaMFgxMjAwBgNVBAMMKUNOPWxlYWYuZXhhbXBsZS5jb20s
857861
IE89RXhhbXBsZSBMZWFmLCBDPUlUMRUwEwYDVQQKDAxFeGFtcGxlIExlYWYxCzAJ
858-
BgNVBAYTAklUMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE9FVR+VHqHu8EGgm5
859-
RFiQDyLMB9UIZ24Wt7gmJDzMwu3vKMlbkTLNk3nRd/jQpv77wW9Djp5fkVmzAkMD
860-
KJuppqOCAUAwggE8MBIGA1UdEwEB/wQIMAYBAf8CAQAwLQYDVR0RBCYwJIIQbGVh
862+
BgNVBAYTAklUMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEfgX8MyOZiOpZL4UM
863+
hv7QCNWPgCCf64bJ6IDsUTXbN+bYnLqiU1/G8w+ZNkendoTGQ44HVX6XFR/dZbY2
864+
Z5EmGKOCAUAwggE8MBIGA1UdEwEB/wQIMAYBAf8CAQAwLQYDVR0RBCYwJIIQbGVh
861865
Zi5leGFtcGxlLm9yZ4YQbGVhZi5leGFtcGxlLm9yZzAOBgNVHQ8BAf8EBAMCAaYw
862866
QgYDVR0fBDswOTA3oDWgM4YxaHR0cHM6Ly9sZWFmLmV4YW1wbGUuY29tL2NybC9s
863867
ZWFmLmV4YW1wbGUuY29tLmNybDCBogYDVR0eAQH/BIGXMIGUoDAwGoYYaHR0cHM6
864868
Ly9sZWFmLmV4YW1wbGUuY29tMBKCEGxlYWYuZXhhbXBsZS5jb22hYDALgglsb2Nh
865869
bGhvc3QwF4IVbG9jYWxob3N0LmxvY2FsZG9tYWluMAuCCTEyNy4wLjAuMTANggtl
866870
eGFtcGxlLmNvbTANggtleGFtcGxlLm9yZzANggtleGFtcGxlLm5ldDAKBggqhkjO
867-
PQQDAgNJADBGAiEA6Jk26U08NVdhN4eaRbvmaBO3mZScgpFpM6UeEIpYA+ACIQCN
868-
e1EotYVdFXh2GOAiu/HcLhbk8MIX7liUnC6lUedcaw==
871+
PQQDAgNJADBGAiEAubazdfFtH6enMMm8KL7WHSpxrzuCWuGQU3rD7DRjVzACIQD2
872+
90ufyAg2/KSEFjJI7lnO4VSpLmVbDiY28LJtKJYJNw==
869873
-----END CERTIFICATE-----
870874
871875
Certificate:
872876
Data:
873877
Version: 3 (0x2)
874-
Serial Number: 166609465481942199701516106011740225358723958170 (0x1d2f06ddab3a673943e507ae5988e1e4a406459a)
878+
Serial Number: 127015391374619447593146117604691507951361222710 (0x163f912f92246206bf544deb70c3eace114e6836)
875879
Signature Algorithm: sha256
876880
Issuer: commonName=CN=ca.example.com, O=Example CA, C=IT, organizationName=Example CA, countryName=IT
877881
Validity
878882
Not Before: May 26 15:30:02 2025 GMT
879883
Not After : May 27 15:30:02 2026 GMT
880884
Subject: commonName=https://intermediate.example.net, organizationName=Example INT, countryName=IT
881885
Subject Public Key Info:
882-
Public Key Algorithm: (unknown)
886+
Public Key Algorithm: id-ecPublicKey (EC)
887+
Public-Key: (256 bit)
888+
Curve: secp256r1
889+
X: 44712352894425285951075803914267030245816186141647312088808675719835416357747
890+
Y: 83268974504224800588255653074967749092278369708460180197183711995036458528853
883891
X509v3 extensions:
884892
X509v3 Basic Constraints:
885893
CA:TRUE, pathlen:1
@@ -901,43 +909,47 @@ Below a non-normative example in plain text (OpenSSL format) of an X.509 Certifi
901909
DNS.6=example.net
902910
903911
Signature Algorithm: sha256
904-
30:45:02:21:00:bf:68:99:e4:79:12:6d:76:91:f2:c3
905-
d3:b6:ca:71:5a:4b:2a:4e:18:0a:dd:ea:45:b0:ea:49
906-
62:5b:d4:c8:4a:02:20:23:44:86:7b:23:4f:b6:be:b4
907-
7f:cd:95:83:77:92:db:f5:a1:56:82:08:1a:7d:d0:02
908-
67:b6:af:74:91:ef:1f
912+
30:45:02:20:17:27:3f:e6:2d:c6:f7:4f:de:3c:1d:ce
913+
22:90:d6:76:52:bf:3e:36:b4:ef:2a:ae:9d:13:35:3d
914+
60:83:36:96:02:21:00:cd:9f:e9:f0:65:1b:54:5c:f9
915+
dd:f4:ec:65:74:59:58:38:8a:30:3c:ed:ed:08:4a:12
916+
cb:82:64:f0:14:d6:ad
909917
910918
-----BEGIN CERTIFICATE-----
911-
MIIC1TCCAnugAwIBAgIUHS8G3as6ZzlD5QeuWYjh5KQGRZowCgYIKoZIzj0EAwIw
919+
MIIC1TCCAnugAwIBAgIUFj+RL5IkYga/VE3rcMPqzhFOaDYwCgYIKoZIzj0EAwIw
912920
UjEuMCwGA1UEAwwlQ049Y2EuZXhhbXBsZS5jb20sIE89RXhhbXBsZSBDQSwgQz1J
913921
VDETMBEGA1UECgwKRXhhbXBsZSBDQTELMAkGA1UEBhMCSVQwHhcNMjUwNTI2MTUz
914922
MDAyWhcNMjYwNTI3MTUzMDAyWjBOMSkwJwYDVQQDDCBodHRwczovL2ludGVybWVk
915923
aWF0ZS5leGFtcGxlLm5ldDEUMBIGA1UECgwLRXhhbXBsZSBJTlQxCzAJBgNVBAYT
916-
AklUMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwEU7hPwB7P6WE2VuBAi0zwhn
917-
fRmKvysWr4IILTqA7A4HHqoSGK1JEluOoDCpKL3MdM16X75tGI9kwYIJgjcw5KOC
924+
AklUMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEYtpLf61Vo3N4exxjQup+bDiN
925+
QfjWmG8u5Ax0/OBNa3O4GJHD7M/iMisSVLdk3GKCATye1POAkNh8AdaQq4+wVaOC
918926
ATEwggEtMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgGmMFIGA1Ud
919927
HwRLMEkwR6BFoEOGQWh0dHBzOi8vaW50ZXJtZWRpYXRlLmV4YW1wbGUubmV0L2Ny
920928
bC9pbnRlcm1lZGlhdGUuZXhhbXBsZS5uZXQuY3JsMIGyBgNVHR4BAf8EgacwgaSg
921929
QDAihiBodHRwczovL2ludGVybWVkaWF0ZS5leGFtcGxlLm5ldDAaghhpbnRlcm1l
922930
ZGlhdGUuZXhhbXBsZS5uZXShYDALgglsb2NhbGhvc3QwF4IVbG9jYWxob3N0Lmxv
923931
Y2FsZG9tYWluMAuCCTEyNy4wLjAuMTANggtleGFtcGxlLmNvbTANggtleGFtcGxl
924-
Lm9yZzANggtleGFtcGxlLm5ldDAKBggqhkjOPQQDAgNIADBFAiEAv2iZ5HkSbXaR
925-
8sPTtspxWksqThgK3epFsOpJYlvUyEoCICNEhnsjT7a+tH/NlYN3ktv1oVaCCBp9
926-
0AJntq90ke8f
932+
Lm9yZzANggtleGFtcGxlLm5ldDAKBggqhkjOPQQDAgNIADBFAiAXJz/mLcb3T948
933+
Hc4ikNZ2Ur8+NrTvKq6dEzU9YIM2lgIhAM2f6fBlG1Rc+d307GV0WVg4ijA87e0I
934+
ShLLgmTwFNat
927935
-----END CERTIFICATE-----
928936
929937
Certificate:
930938
Data:
931939
Version: 3 (0x2)
932-
Serial Number: 342257486529888684799109295840076139464867004184 (0x3bf35b42db365d2741af24d73f5fbfda0c493f18)
940+
Serial Number: 452980749148206345586951733554639962254487392255 (0x4f585bfb232d59217abfa2057dc59946b5e90fff)
933941
Signature Algorithm: sha256
934942
Issuer: commonName=CN=ca.example.com, O=Example CA, C=IT, organizationName=Example CA, countryName=IT
935943
Validity
936944
Not Before: May 26 15:30:02 2025 GMT
937945
Not After : May 27 15:30:02 2026 GMT
938946
Subject: commonName=CN=ca.example.com, O=Example CA, C=IT, organizationName=Example CA, countryName=IT
939947
Subject Public Key Info:
940-
Public Key Algorithm: (unknown)
948+
Public Key Algorithm: id-ecPublicKey (EC)
949+
Public-Key: (256 bit)
950+
Curve: secp256r1
951+
X: 43579141728397669940566243379506025512719876549515886649419429163987168126704
952+
Y: 70610508709931797167198225385392925991185949914995640155472490331947935358876
941953
X509v3 extensions:
942954
X509v3 Basic Constraints:
943955
CA:TRUE, pathlen:2
@@ -961,67 +973,32 @@ Below a non-normative example in plain text (OpenSSL format) of an X.509 Certifi
961973
DNS.6=example.net
962974
963975
Signature Algorithm: sha256
964-
30:44:02:20:13:09:99:fa:30:ea:5a:97:9f:89:ff:dc
965-
4d:5d:a0:15:70:3d:5f:6c:77:14:b9:a5:2a:18:34:cf
966-
31:35:96:da:02:20:62:8e:85:1c:d6:a0:04:e5:44:f2
967-
27:56:a7:d2:ca:3a:2e:dd:53:d3:39:1e:d7:22:45:ea
968-
b0:ba:cd:9d:a1:18
976+
30:46:02:21:00:9c:7b:4f:e9:2f:4b:03:c7:88:ba:31
977+
95:7c:e0:34:6d:a2:a4:70:e2:a4:c9:93:9c:ce:1f:51
978+
a4:a4:cc:7b:94:02:21:00:ba:55:bd:7a:ec:59:1a:68
979+
2c:dc:76:d6:6b:f4:c0:98:12:87:a2:02:aa:2c:bd:75
980+
d4:97:e9:9c:33:29:4b:26
969981
970982
-----BEGIN CERTIFICATE-----
971-
MIICyzCCAnKgAwIBAgIUO/NbQts2XSdBryTXP1+/2gxJPxgwCgYIKoZIzj0EAwIw
983+
MIICzTCCAnKgAwIBAgIUT1hb+yMtWSF6v6IFfcWZRrXpD/8wCgYIKoZIzj0EAwIw
972984
UjEuMCwGA1UEAwwlQ049Y2EuZXhhbXBsZS5jb20sIE89RXhhbXBsZSBDQSwgQz1J
973985
VDETMBEGA1UECgwKRXhhbXBsZSBDQTELMAkGA1UEBhMCSVQwHhcNMjUwNTI2MTUz
974986
MDAyWhcNMjYwNTI3MTUzMDAyWjBSMS4wLAYDVQQDDCVDTj1jYS5leGFtcGxlLmNv
975987
bSwgTz1FeGFtcGxlIENBLCBDPUlUMRMwEQYDVQQKDApFeGFtcGxlIENBMQswCQYD
976-
VQQGEwJJVDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABAZR6TY0PDNDSug886Bg
977-
WuB5dj7EA1+ovLUA/lc5pvN2xKtoY0+7XkH6FFtZMoBXdsxFf6RM89XDM9mufLNF
978-
bCijggEkMIIBIDASBgNVHRMBAf8ECDAGAQH/AgECMBkGA1UdEQQSMBCCDmNhLmV4
988+
VQQGEwJJVDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABGBY641oEV4gpTw7ESxX
989+
piZPTGBlTNheTRZVfYDn1+bwnBwhtBm4PvD0ltZ6dFq7ZTWQ0jMtlVw6FEhdoC32
990+
X5yjggEkMIIBIDASBgNVHRMBAf8ECDAGAQH/AgECMBkGA1UdEQQSMBCCDmNhLmV4
979991
YW1wbGUuY29tMA4GA1UdDwEB/wQEAwIBpjA+BgNVHR8ENzA1MDOgMaAvhi1odHRw
980992
czovL2NhLmV4YW1wbGUuY29tL2NybC9jYS5leGFtcGxlLmNvbS5jcmwwgZ4GA1Ud
981993
HgEB/wSBkzCBkKAsMBiGFmh0dHBzOi8vY2EuZXhhbXBsZS5jb20wEIIOY2EuZXhh
982994
bXBsZS5jb22hYDALgglsb2NhbGhvc3QwF4IVbG9jYWxob3N0LmxvY2FsZG9tYWlu
983995
MAuCCTEyNy4wLjAuMTANggtleGFtcGxlLmNvbTANggtleGFtcGxlLm9yZzANggtl
984-
eGFtcGxlLm5ldDAKBggqhkjOPQQDAgNHADBEAiATCZn6MOpal5+J/9xNXaAVcD1f
985-
bHcUuaUqGDTPMTWW2gIgYo6FHNagBOVE8idWp9LKOi7dU9M5HtciReqwus2doRg=
996+
eGFtcGxlLm5ldDAKBggqhkjOPQQDAgNJADBGAiEAnHtP6S9LA8eIujGVfOA0baKk
997+
cOKkyZOczh9RpKTMe5QCIQC6Vb167FkaaCzcdtZr9MCYEoeiAqosvXXUl+mcMylL
998+
Jg==
986999
-----END CERTIFICATE-----
9871000
9881001
989-
990-
Federation participants can ensure that their certificates are consistent, enabling interoperability and security across the federation. This approach, enabling X.509 certificate issuance delegation, introduces innovative practices for certificate management using the underlying Trust Relationships established within the OpenID Federation.
991-
992-
993-
X.509 Certificate Revocation
994-
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
995-
996-
An X.509 Certificate can be revoked by its Issuer.
997-
Revocation lists, and or any other revocation check mechanisms, are required only for X.509 Certificate with expiration time superior to 24 hours, otherwise they are not required.
998-
999-
When the X.509 Certificate issuer is the Leaf and therefore the X.509 Certificate is about itself, if the certificate expiration time is superior than 24 hours from the ``X509_NOT_VALID_BEFORE`` time, it MUST implement a CRL about the issued certificate and keep it updated.
1000-
When the X.509 Certificate issuer is an Immediate superior, such as the Trust Anchor or a Intermediate, and it revokes the certificate about the Leaf, therefore the X.509 Certificate about one of the Leaves Federation Entity Key. This action invalidates the entire Trust Chain associated with that Leaf's cryptographic public key, effectively removing its ability to issue further X.509 Certificates about itself. This hierarchical revocation mechanism ensures that any compromise or misbehavior by a Leaf entity can be swiftly addressed.
1001-
1002-
Below a non-normative example, in plain text, examplify the content of a CRL.
1003-
1004-
.. code-block:: text
1005-
1006-
Certificate Revocation List (CRL):
1007-
Version: 2 (0x1)
1008-
Signature Algorithm: sha256WithRSAEncryption
1009-
Issuer: CN=https://leaf.example.org, O=Leaf, C=IT
1010-
Last Update: Sep 1 00:00:00 2023 GMT
1011-
Next Update: Sep 8 00:00:00 2023 GMT
1012-
Revoked Certificates:
1013-
Serial Number: 987654320
1014-
Revocation Date: Aug 25 12:00:00 2023 GMT
1015-
CRL Entry Extensions:
1016-
Reason Code: Key Compromise
1017-
Serial Number: 987654321
1018-
Revocation Date: Aug 30 15:00:00 2023 GMT
1019-
CRL Entry Extensions:
1020-
Reason Code: Cessation of Operation
1021-
Signature Algorithm: sha256WithRSAEncryption
1022-
Signature:
1023-
5c:4f:3b:...
1024-
10251002
Using the underlying layer established with OpenID Federation 1.0, all X.509 certificates are issued in a properly decentralized manner using the delegation pattern.
10261003

10271004

utils/x509_chain_builder.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
from cryptography import x509
22
from cryptography.hazmat.primitives import serialization
33
from cryptography.x509.oid import ExtensionOID
4+
5+
from cryptography.hazmat.primitives.asymmetric import rsa, ec
6+
47
import binascii
58
import textwrap
69

@@ -44,11 +47,9 @@ def format_name_constraints(nc):
4447
return "\n".join(lines) if lines else " (none)"
4548

4649
def format_pubkey(pubkey):
47-
if hasattr(pubkey, "key_size"):
50+
if isinstance(pubkey, rsa.RSAPublicKey):
51+
key_type = "RSA"
4852
key_size = pubkey.key_size
49-
else:
50-
key_size = "unknown"
51-
if pubkey.__class__.__name__ == "RSAPublicKey":
5253
numbers = pubkey.public_numbers()
5354
modulus = numbers.n
5455
exponent = numbers.e
@@ -60,26 +61,29 @@ def format_pubkey(pubkey):
6061
for line in mod_lines
6162
]
6263
return (
63-
f" Public Key Algorithm: rsaEncryption\n"
64+
f" Public Key Algorithm: rsaEncryption ({key_type})\n"
6465
f" Public-Key: ({key_size} bit)\n"
6566
f" Modulus:\n" +
6667
"\n".join(mod_lines) + "\n"
6768
f" Exponent: {exponent} (0x{exponent:x})"
6869
)
69-
elif pubkey.__class__.__name__ == "EllipticCurvePublicKey":
70+
elif isinstance(pubkey, ec.EllipticCurvePublicKey):
71+
key_type = "EC"
72+
key_size = pubkey.key_size
7073
numbers = pubkey.public_numbers()
7174
curve = pubkey.curve.name
7275
x = numbers.x
7376
y = numbers.y
7477
return (
75-
f" Public Key Algorithm: id-ecPublicKey\n"
78+
f" Public Key Algorithm: id-ecPublicKey ({key_type})\n"
7679
f" Public-Key: ({key_size} bit)\n"
7780
f" Curve: {curve}\n"
7881
f" X: {x}\n"
7982
f" Y: {y}"
8083
)
8184
else:
82-
return " Public Key Algorithm: (unknown)"
85+
key_type = type(pubkey).__name__
86+
return f" Public Key Algorithm: (unknown: {key_type})"
8387

8488
def format_basic_constraints(bc):
8589
s = f" CA:{'TRUE' if bc.ca else 'FALSE'}"

0 commit comments

Comments
 (0)