openssl忽略序列号扩展

openssl忽略序列号扩展,openssl,x509,Openssl,X509,你好! 我创建了一个证书请求,结果如下: -----BEGIN CERTIFICATE REQUEST----- MIICszCCAZsCAQAwKzEKMAgGA1UEChMBczEQMA4GA1UECxMHb3JnVW5pdDELMAkG A1UEAxMCY24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC4p/WHGkLZ DGuUenb8e+FtwimfPQvAGJU4IwVKgjjk3cqqdED2PgyeSKQEehyWdnEaGaKdDQ7

你好! 我创建了一个证书请求,结果如下:

-----BEGIN CERTIFICATE REQUEST-----
MIICszCCAZsCAQAwKzEKMAgGA1UEChMBczEQMA4GA1UECxMHb3JnVW5pdDELMAkG
A1UEAxMCY24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC4p/WHGkLZ
DGuUenb8e+FtwimfPQvAGJU4IwVKgjjk3cqqdED2PgyeSKQEehyWdnEaGaKdDQ72
unsPfOeRYAbzhEeKNM0qH/jx5gC5CO0/lq58UQOtBg4GXMLCMel+QIofBb1UGbLo
KviHLR02jfqYrUf72GY83JrhUGlzAJEl6upDvuZalp5qXql9ge8ylfGx/iOUYPk7
/gvfTOLDQmDKcUQ9nW8H9U+cl82lcsBMv7V4XCoG16GfEIziLyFHtLwvAwvGE2md
IEnoMwhY0cUxp/c8bzL0hvNvMDy1lNBJ14wohdTh95/Guf46d8DtWc7e1Nrb+biT
HxWsftA4WEQdAgMBAAGgQzBBBgkqhkiG9w0BCQ4xNDAyMDAGA1UEBQQpVURJRDow
MDAwMDAwMC03YTBlLTkyNTUtZmZmZi1mZmZmYmY4ZmYyZDUwDQYJKoZIhvcNAQEL
BQADggEBAEm8HXmmxZ7B6Omcezuhle1Xz/9Iiaet2SnkSwm0dVmZXzyamWFHSls+
1biMtZb3Ath0TeDQ7kUh40SyFBKOTSWD8EhbgsMrys0ALUOJ16r2mGXbVdnoc/52
dm8jKXSqB/tKa4AXDQJkR6GNJtNu3k4XHSz25felkZosqGHdPmnQGiPDpJsFenxm
yD+nYTUrzrMM4FrBKLDex4mT0raFEkxN52wIwQ+UtI84OfxebztKSr+WCeafCKnV
idQrTBcM5zMdAPSgKIdh2kFOr3WdXgLonQiQ8GVleBdFGy0aw1LRVZ3+XsIrnEx2
L1dRm4u70iXtUwYw5tSaK6KNT7SJo00=
-----END CERTIFICATE REQUEST-----
用两个字来说,它说:

cn
Certificate request

Public Key Info
Key Algorithm:  RSA
Key Parameters: 05 00
Key Size:   2048
Key SHA1 Fingerprint:   E4 .. E9 49 A3 D3

Public Key: 30 82 01 0A 02 82 01 01 ... 03 01 00 01
现在最重要的是:

Extension
Identifier: Serial Number
Value:  55 44 49 44 3A 30 30 30 30 30 30 30 30 2D 37 61 30 65 2D 39 32     35 35 2D 66 66 66 66 2D 66 66 66 66 62 66 38 66 66 32 64 35
Critical:   No
我希望这个分机序列号在我未来的证书中。 但当我做类似的事情时

openssl x509 -req -in ../req.req -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out user.crt -days 5000 -extensions v3_usr -CAcreateserial

我没有在result user.cer中获得扩展名。我做错了什么?

您使用
-CAcreateserial
选项。记录如下:

-CAcreateserial

如果CA序列号文件不存在,则使用此选项创建CA序列号文件:它将包含序列号“02”,并且正在签名的证书将以1作为其序列号。如果指定了-CA选项且序列号文件不存在,则生成随机数;这是推荐的做法

要明确设置序列号,您可能需要使用选项
-CAserial

-案例文件名

设置要使用的CA序列号文件

当使用-CA选项对证书进行签名时,它使用文件中指定的序列号。该文件由一行组成,其中包含偶数个十六进制数字和要使用的序列号。每次使用后,序列号将递增并再次写入文件

默认文件名由附加“.srl”的CA证书文件基名称组成。例如,如果CA证书文件名为“mycacert.pem”,它希望找到一个名为“mycacert.srl”的序列号文件


只需将所需的序列号写入文件并使用它。

我怀疑有几个问题

首先,扩展值的格式不正确。它缺少
extnValue
字段的嵌套ASN.1类型标识符。根据,X.509扩展为:

Extension  ::=  SEQUENCE  {
     extnID      OBJECT IDENTIFIER,
     critical    BOOLEAN DEFAULT FALSE,
     extnValue   OCTET STRING
                 -- contains the DER encoding of an ASN.1 value
                 -- corresponding to the extension type identified
                 -- by extnID
     }
extnValue
(即八进制字符串)下,您应该放置嵌套类型(我不知道序列号扩展的确切语法)。它可以是序列、另一个八位字节字符串或整数(因为序列号是整数)

但是,缺少嵌套类型: 在选定的八位字节字符串下应该有另一个嵌套节点,而您直接将序列号作为
extnValue
payload放置

如果此扩展旨在指示CA在证书中放置指定的序列号(作为字段),则您违反了另一项要求:

证书用户必须能够处理serialNumber值 最多20个八位组。符合条件的CA不得使用serialNumber值 超过20个八位组

您的序列号看起来比20个八位字节长一点。此外,您可能违反本节第一部分:

对于给定CA(即 颁发者名称和序列号标识唯一的证书)

也就是说,如果用户要求特定的序列号,可能会导致序列号不唯一

编辑: 根据Ilya Matveychikov,嵌套类型应为可打印字符串。这意味着您的扩展值应为:

13 2B 55 44 49 44 3A 30  30 30 30 30 30 30 30 2D
37 61 30 65 2D 39 32 35  35 2D 66 66 66 66 2D 66
66 66 66 62 66 38 66 66  32 64 35
编码后,其外观如下所示:

根据定义,必须在
extnValue
上放置
PrintableString

serialNumber ATTRIBUTE ::= {
    WITH SYNTAX PrintableString (SIZE (1..ub-serialNumber))
    EQUALITY MATCHING RULE caseIgnoreMatch
    SUBSTRINGS MATCHING RULE caseIgnoreSubstringsMatch
    ID id-at-serialNumber
}

Stack Overflow是一个关于编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参见帮助中心中的。也许或者会是一个更好的提问的地方。