crt файл это кодированный , а точнее сказать просто упакованный особым образом файл с информацией об открытом ключе. Этот формат был очень давно придуман и задействован мировым сообществом и менять его нецелесообразно.
Для кодирования используется особый язык, называемый ASN.1 .
Данные записываются последовательно (а как по другому), и сначала первый байт это тип параметра.
Вот как определяется типы параметров :
Наименование типа | Краткое описание | Представление типа в DER-кодировке |
---|---|---|
SEQUENCE | Используется для описания структуры данных, состоящей из различных типов. | 30 |
INTEGER | Целое число. | 02 |
OBJECT IDENTIFIER | Последовательность целых чисел. | 06 |
UTCTime | Временной тип, содержит 2 цифры для определения года | 17 |
GeneralizedTime | Расширенный временной тип, содержит 4 цифры для обозначения года. | 18 |
SET | Описывает структуру данных разных типов. | 31 |
UTF8String | Описывает строковые данные. | 0C |
NULL | Собственно NULL | 05 |
BIT STRING | Тип для хранения последовательности бит. | 03 |
Первый байт определяет тип, второй байт показывает длину блока, а далее само значение параметра.
Создать crt можно примерно так :
req -new -x509 -days 3650 -key root.key.pem -out root.crt -config root_req.config
То есть используется некий закрытый ключ (заранее предварительно созданный [root.key.pem] ). И используются данные из файла *.config .
В результате получается такое содержание в файле crt :
-----BEGIN CERTIFICATE-----
MIIFtTCCA50CFHLi0oFvmFmPkvrS14uMIaIV4jEfMA0GCSqGSIb3DQEBCwUAMIGW
MQ8wDQYDVQQDDAZCSVQgQ0ExCzAJBgNVBAYTAlJVMRAwDgYDVQQKDAdCSVQgTHRk
MRQwEgYDVQQLDAtEZXZlbG9wbWVtdDEYMBYGA1UECAwPU2Fua3QgUGV0ZXJidXJn
MRgwFgYDVQQHDA9TYW5rdCBQZXRlcmJ1cmcxGjAYBgkqhkiG9w0BCQEWC3BAa2tt
c3BiLnJ1MB4XDTIxMDcxOTEzMTczMloXDTMxMDcxNzEzMTczMlowgZYxDzANBgNV
BAMMBkJJVCBDQTELMAkGA1UEBhMCUlUxEDAOBgNVBAoMB0JJVCBMdGQxFDASBgNV
BAsMC0RldmVsb3BtZW10MRgwFgYDVQQIDA9TYW5rdCBQZXRlcmJ1cmcxGDAWBgNV
BAcMD1Nhbmt0IFBldGVyYnVyZzEaMBgGCSqGSIb3DQEJARYLcEBra21zcGIucnUw
ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnpt14xWAT66Z/I3a/KKXi
vGCXkVHjAw0BRGbSwe2k9QutMlYBlT0hvEoukeOIjaknsphwTvQZkgu4wwj+eKA8
WO0iyzZhflS4rItiDB7Rwd8XRHlw6J18uWqpgGBQMZZL3WjdydQz5Cz1l3k8qAzg
sWbKTg7y193du4va+/3AOzophAjHYuSHVtPLoYJbdmHq5y1WyI/W5Kdt29dzWdQ6
CKKmdfTZfopNuhsZek2fS60MmgG8L8mg5HPBHvBlV/UWgmt4Rzya4+MR8waxKqzW
EUzN1x+nW6XmQ26u11fHBgehu13GqNZhMX7qJJB9yLD7YI7QRqE2C/bFWCYSqrIj
Z/dc1bFDvSeHJeY5sOi2wI9yY2PcLNT2GFJqbONMyuZwR5ucOzDpuQRU0Ri60kI/
7YR6MDTHIOAc2LWHOGUNsFqp6QTRjZ9UZ53hWvDnO/z2bAgYaDSsI7u9xWhmv7dG
oOxFIRFlc65mmFAizKzPXBXALDo6FQctKD17FtpySLf4k0r1nmbphtznuiVVu9Fl
J14mZpc+jOQm76uQFnmYtmoa4Q6wQSx7dGpCVJFz5HtZrwYeRRyZqqnm5jeb3kAj
nzro3J7bzrWMH/iback2hbWuwqbkBQ+mrI23vPMLW45vJJWRJwI8u6Dp3bTy45wX
fv9ixm393rhE9hswp34oEQIDAQABMA0GCSqGSIb3DQEBCwUAA4ICAQBIya4gYnY1
UYLe5whqHNyPX1erHmhwD7m5L2PLz3RRrk1/jFpoGu5J6UmM6Es+H/6zzLytIoqE
hrnf58M42cTdRwUZPBHLQO8+rqRYQmA1us9JgVXdPzruw6u59u21tfNh5z4EDThR
C38iPngbRu6s37Wdi2A8sN/1tJ3hPrKeFbkDeYZcLsHoaX7JhhPCq3Q0I/Zh/BJK
JVSAKMyidGktgCLEUMNJZY+1/Ipl/Oxv8B8Ofppn/UHVfCBKupTZVf1VG8ifYj11
L7pIuRJG8R9+OjgQSBJRZMRdL9uKvGEsqitRZM2mKzQ9VV8LPeEKTKt5wApobvEH
RxVg0WvrsG7G/PbmiKL71Ze+C/2l+uIvxzPj86h5/CDT17K0I+JsLM9QTcolzNZ5
pAkv0b4ztzv27UTHKdKFL1+1/LLlPxQgOGL7Wnbrqmsq3W3BZ3XHO4Yp9DsVLCEb
IDfOCTdgtBlek9L+/PjytfoaLxy9tr4fSdwYiPpOUVylDA90EloUaxIhhapZ3hKC
m+npJC2MCFP+ck7DJs6eSqab4epEF0VSuMTbgiA8Y+ZcBRjZQCQuxsPOEaMjAYqZ
AICMnX95fc7Lsq2xt397WMqi/QsbIqg1QQLGdA9OfFtCDJynYGaKQMLekUuX4qGW
IsKNpBG1s8Y9/gZ2ih7hsJbjjxZtxfd8qA==
-----END CERTIFICATE-----
Онлайн декодером преобразуем это в ASN.1 и видим понятное содержание:
SEQUENCE (3 elem)
SEQUENCE (6 elem)
INTEGER (158 bit) 320326033353084750988052211938238272967126592697
SEQUENCE (2 elem)
OBJECT IDENTIFIER 1.2.840.113549.1.1.11 sha256WithRSAEncryption (PKCS #1)
NULL
SEQUENCE (7 elem)
SET (1 elem)
SEQUENCE (2 elem)
OBJECT IDENTIFIER 2.5.4.3 commonName (X.520 DN component)
UTF8String BIT CA
SET (1 elem)
SEQUENCE (2 elem)
OBJECT IDENTIFIER 2.5.4.6 countryName (X.520 DN component)
PrintableString RU
SET (1 elem)
SEQUENCE (2 elem)
OBJECT IDENTIFIER 2.5.4.10 organizationName (X.520 DN component)
UTF8String BIT Ltd
SET (1 elem)
SEQUENCE (2 elem)
OBJECT IDENTIFIER 2.5.4.11 organizationalUnitName (X.520 DN component)
UTF8String Developmemt
SET (1 elem)
SEQUENCE (2 elem)
OBJECT IDENTIFIER 2.5.4.8 stateOrProvinceName (X.520 DN component)
UTF8String Sankt Peterburg
SET (1 elem)
SEQUENCE (2 elem)
OBJECT IDENTIFIER 2.5.4.7 localityName (X.520 DN component)
UTF8String Sankt Peterburg
SET (1 elem)
SEQUENCE (2 elem)
OBJECT IDENTIFIER 1.2.840.113549.1.9.1 emailAddress (PKCS #9. Deprecated, use an altName extension instead)
IA5String p@kkmspb.ru
SEQUENCE (2 elem)
UTCTime 2021-07-19 13:28:52 UTC
UTCTime 2031-07-17 13:28:52 UTC
SEQUENCE (7 elem)
SET (1 elem)
SEQUENCE (2 elem)
OBJECT IDENTIFIER 2.5.4.3 commonName (X.520 DN component)
UTF8String BIT CA
SET (1 elem)
SEQUENCE (2 elem)
OBJECT IDENTIFIER 2.5.4.6 countryName (X.520 DN component)
PrintableString RU
SET (1 elem)
SEQUENCE (2 elem)
OBJECT IDENTIFIER 2.5.4.10 organizationName (X.520 DN component)
UTF8String BIT Ltd
SET (1 elem)
SEQUENCE (2 elem)
OBJECT IDENTIFIER 2.5.4.11 organizationalUnitName (X.520 DN component)
UTF8String Developmemt
SET (1 elem)
SEQUENCE (2 elem)
OBJECT IDENTIFIER 2.5.4.8 stateOrProvinceName (X.520 DN component)
UTF8String Sankt Peterburg
SET (1 elem)
SEQUENCE (2 elem)
OBJECT IDENTIFIER 2.5.4.7 localityName (X.520 DN component)
UTF8String Sankt Peterburg
SET (1 elem)
SEQUENCE (2 elem)
OBJECT IDENTIFIER 1.2.840.113549.1.9.1 emailAddress (PKCS #9. Deprecated, use an altName extension instead)
IA5String p@kkmspb.ru
SEQUENCE (2 elem)
SEQUENCE (2 elem)
OBJECT IDENTIFIER 1.2.840.113549.1.1.1 rsaEncryption (PKCS #1)
NULL
BIT STRING (4208 bit) 001100001000001000000010000010100000001010000010000000100000000100000…
SEQUENCE (2 elem)
INTEGER (4096 bit) 781741604543757309875305173797491334639825981845956327121988260618506…
INTEGER 65537
SEQUENCE (2 elem)
OBJECT IDENTIFIER 1.2.840.113549.1.1.11 sha256WithRSAEncryption (PKCS #1)
NULL
BIT STRING (4096 bit) 100010000000101100001111110000100000011011100101111110010001010100011…
Еще можно посмотреть содержание crt командой :
openssl x509 -noout -text -in root.crt
OpenSSL> x509 -noout -text -in root.crt
Certificate:
Data:
Version: 1 (0x0)
Serial Number:
38:1b:ea:86:91:d5:09:82:86:aa:67:57:c4:b0:6e:cd:b3:70:ac:b9
Signature Algorithm: sha256WithRSAEncryption
Issuer: CN = BIT CA, C = RU, O = BIT Ltd, OU = Developmemt, ST = Sankt Peterburg, L = Sankt Peterburg, emailAddress = p@kkmspb.ru
Validity
Not Before: Jul 19 13:28:52 2021 GMT
Not After : Jul 17 13:28:52 2031 GMT
Subject: CN = BIT CA, C = RU, O = BIT Ltd, OU = Developmemt, ST = Sankt Peterburg, L = Sankt Peterburg, emailAddress = p@kkmspb.ru
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (4096 bit)
Modulus:
00:bf:9e:bb:aa:3f:9b:49:51:75:a7:1c:7e:94:c8:
e4:fd:09:6d:5a:1a:a0:94:20:c7:c1:8f:8c:e1:3c:
4b:2f:c2:48:44:72:2e:10:40:1f:bc:e7:4b:cf:7b:
26:f6:8b:dc:de:10:6c:5a:22:3c:3e:e9:af:74:4f:
21:49:b6:d5:f7:22:05:22:e9:cb:37:4b:72:fb:71:
fd:c7:37:dd:56:05:e4:bb:fa:3e:5f:9e:a3:f4:d9:
4c:bd:11:3b:39:89:e0:05:4e:2b:e4:64:72:9c:28:
d8:d1:58:ea:4f:e9:2f:36:34:df:a0:12:16:1f:a5:
b0:13:2e:a8:56:cf:96:43:28:c6:bb:3a:09:f3:7c:
a9:f9:c0:19:70:67:21:a9:42:90:be:a2:5e:9d:98:
fb:a8:f0:4c:c6:73:e0:26:43:5e:40:ca:dd:61:72:
86:ad:60:3f:0f:b6:bd:78:4f:80:7c:9c:b2:f2:a2:
af:c9:46:1b:53:57:95:ae:d4:2e:aa:e2:70:1d:ef:
36:e0:b8:44:f3:49:59:9e:71:c3:4e:8c:71:31:ae:
ea:4f:6d:2e:34:71:61:da:a5:b0:72:6c:3f:53:93:
8c:28:1b:f7:4e:25:aa:38:41:66:3a:11:19:3e:f0:
fc:53:b2:79:97:4d:92:99:ad:3d:d2:14:92:3d:41:
52:81:93:71:66:a5:8a:eb:d4:a8:c7:64:41:fe:3b:
03:94:59:ea:75:89:7f:f0:a7:f8:80:93:17:12:a9:
b3:15:8f:ee:a8:01:63:f4:fe:f6:a4:c9:c4:5f:25:
3c:f6:2c:bf:df:c7:24:66:e8:4e:a5:33:ed:3a:74:
f5:2a:75:54:f7:07:23:24:38:2d:9c:be:55:48:3e:
0e:56:9e:f6:44:16:28:57:37:61:2b:43:2a:f9:f9:
7f:b1:09:8f:32:8e:df:ce:11:3a:a7:cf:3b:c2:2c:
6d:94:e4:5c:59:d9:cd:4d:2f:65:a1:71:65:d2:0c:
28:fd:27:93:b1:d0:a3:e3:bb:53:7d:49:25:86:ad:
af:e2:67:47:3f:36:88:8d:f2:1d:24:fc:28:3f:53:
40:9a:c0:af:05:87:b7:0d:35:f4:ec:08:fe:e6:a3:
60:33:52:56:ab:d2:9a:a5:aa:30:8b:9f:49:26:a2:
4c:c0:f2:2b:13:62:20:a3:6a:77:5c:9b:5e:ab:fb:
d3:e1:af:a4:17:39:76:bf:29:c3:51:59:cd:f2:85:
19:8d:ce:7f:c7:15:c8:80:a0:dd:ca:dd:f9:ea:fa:
ab:bf:f8:21:78:c5:77:8c:d9:47:51:72:08:c7:2b:
d0:ef:42:e5:92:52:d7:5c:51:4f:3a:d2:9b:28:99:
73:e4:39
Exponent: 65537 (0x10001)
Signature Algorithm: sha256WithRSAEncryption
88:0b:0f:c2:06:e5:f9:15:1d:19:1f:3e:13:d2:04:f2:81:59:
fe:99:38:80:b3:33:0c:cd:97:b5:2f:94:9d:44:1f:be:a0:25:
0c:c3:2d:c5:fc:bd:2f:72:8e:1b:1e:92:b2:b6:ee:c6:5b:2d:
f9:a3:13:84:ed:5a:3d:1a:d0:6b:e8:70:83:77:61:00:85:dc:
ab:65:8e:1a:16:86:e3:c2:fe:c1:8f:ed:d7:ea:e2:73:9b:98:
10:aa:25:be:17:8a:99:1b:76:78:6f:9c:d8:a4:dc:99:6b:5b:
f6:af:b9:46:16:df:4f:c1:00:21:5f:06:b5:a6:6e:18:c6:55:
61:44:da:e3:7d:53:9b:47:3c:62:4d:b3:ae:42:fe:6e:78:66:
8e:9d:9d:82:73:e4:0a:2f:41:c7:83:88:cb:08:9b:e7:1c:2c:
f9:c1:62:a0:07:ce:24:71:cd:02:6a:ad:32:45:d5:db:ba:ac:
98:95:7d:1c:8c:b8:95:b5:c4:db:57:07:86:4b:d8:ee:d3:d0:
8d:71:37:40:01:7b:75:94:43:09:95:42:da:53:1c:84:01:b3:
52:71:0e:ef:96:71:22:b8:93:79:ca:68:34:5a:2e:e9:37:81:
4d:66:bb:11:56:21:98:e0:0e:50:c2:fb:74:6d:ec:50:64:2d:
d3:3a:7c:55:99:7a:38:7b:02:25:df:76:63:01:14:bd:40:d6:
9b:b6:1a:67:6d:b1:b6:fc:21:af:c3:10:c9:e9:09:51:39:f2:
1c:17:90:3f:e8:cc:03:1d:95:4d:41:83:3a:9a:72:2b:47:ca:
53:c5:82:ab:44:ed:1e:55:bf:e7:74:e7:ff:4b:1f:97:48:d2:
69:2b:84:bf:60:b0:53:4a:5e:27:26:e8:fd:bd:92:97:8c:50:
e2:f2:f4:70:47:4b:6a:3e:f3:4f:bf:07:73:1d:0b:30:a4:5e:
0e:52:c6:76:a1:15:d6:d3:29:77:0c:6b:5b:d5:76:92:39:73:
b1:eb:e5:49:24:32:6f:df:86:b5:74:5b:c2:58:3d:33:ff:be:
ad:ba:78:6d:d7:01:8d:ed:bf:62:68:95:11:81:6b:21:9c:89:
15:f6:18:13:9b:2f:cb:62:7b:c4:70:75:0c:d8:f9:fa:e3:cf:
59:24:d9:e1:89:67:6b:d5:c8:4a:ac:1d:a8:7c:c3:74:b3:7b:
21:da:6d:56:68:c3:5c:4e:aa:24:13:0e:b5:f8:ec:b7:02:3e:
08:8f:39:31:76:c6:d6:ec:f6:ac:9b:cc:6e:20:16:78:bb:1a:
4a:c0:1e:51:d7:c1:0e:1d:5d:ec:1d:62:ee:e4:07:b2:37:74:
18:64:85:46:03:27:88:4a
В итоге в файле crt мы имеем данные сертификаты , которые подписываются это :
Issuer: CN = BIT CA, C = RU, O = BIT Ltd, OU = Developmemt, ST = Sankt Peterburg, L = Sankt Peterburg, emailAddress = p@kkmspb.ru
и
Subject: CN = BIT CA, C = RU, O = BIT Ltd, OU = Developmemt, ST = Sankt Peterburg, L = Sankt Peterburg, emailAddress = p@kkmspb.ru
Издатель равен субъекту , то есть сертификат самоподписной получается.
В crt мы также получаем открытую часть ключа RSA Public-Key.
И мы имеем подпись , а точнее ХЭШ данных сертифика, зашифрованный закрытой частью ключа.
Таким образом закрытой части ключа в файле cer нет.
x509 -noout -modulus -in root.crt