我们有一个用python编写的测试套件,我必须使用PKI来添加测试。对于证书注册,我必须将CSR和制造证书放在CMS中,并将其发送到PKI。
使用openssl,我可以使用:
openssl smime -sign -outform PEM -signer manufacture.crt -inkey DMC.key -in CSR.pem -binary -nodetach -out CMS.p7在本例中,我的密钥是用openssl生成的。但是我们必须使用硬件安全元素来生成密钥并计算签名。到目前为止,我可以用python创建相同的CMS结构,但是我不能用openssl验证它:
openssl cms -verify -noverify -inform PEM -in python_generated_cms.txt结果是“验证失败”。但是当我添加选项-nosigs时,optput就是我的CSR。所以我的签名似乎无效。我学过rfc5652,但没有成功。
下面是我计算签名的工作流程:
下面是我分析的CMS示例:
SEQUENCE (2 elem)
OBJECT IDENTIFIER 1.2.840.113549.1.7.2 signedData (PKCS #7)
[0] (1 elem)
SEQUENCE (5 elem)
INTEGER 1
SET (1 elem)
SEQUENCE (2 elem)
OBJECT IDENTIFIER 2.16.840.1.101.3.4.2.1 sha-256 (NIST Algorithm)
NULL
SEQUENCE (2 elem)
OBJECT IDENTIFIER 1.2.840.113549.1.7.1 data (PKCS #7)
[0] (1 elem)
OCTET STRING (416 byte) 2D2D2D2D2D424547494E20434554553542D2D2D2D2… [CMS]
[0] (1 elem)
SEQUENCE (3 elem)
... shorted certificate here ...
SEQUENCE (1 elem)
OBJECT IDENTIFIER 1.2.840.10045.4.3.3 ecdsaWithSHA384 (ANSI X9.62 ECDSA algorithm with SHA384)
BIT STRING (1 elem)
SEQUENCE (2 elem)
INTEGER (384 bit) 251806783159843676750320964557058746…
INTEGER (383 bit) 146223079633757899471433693312235433…
SET (1 elem)
SEQUENCE (6 elem)
INTEGER 1
SEQUENCE (2 elem)
SEQUENCE (4 elem)
SET (1 elem)
SEQUENCE (2 elem)
OBJECT IDENTIFIER 2.5.4.6 countryName (X.520 DN component)
PrintableString CH
SET (1 elem)
SEQUENCE (2 elem)
OBJECT IDENTIFIER 2.5.4.10 organizationName (X.520 DN component)
PrintableString My organisation
SET (1 elem)
SEQUENCE (2 elem)
OBJECT IDENTIFIER 2.5.4.11 organizationalUnitName (X.520 DN component)
PrintableString PKI
SET (1 elem)
SEQUENCE (2 elem)
OBJECT IDENTIFIER 2.5.4.3 commonName (X.520 DN component)
PrintableString Non-Prod CA
INTEGER (82 bit) 3419130548216348442042883485
SEQUENCE (2 elem)
OBJECT IDENTIFIER 2.16.840.1.101.3.4.2.1 sha-256 (NIST Algorithm)
NULL
* [0] (4 elem)
* SEQUENCE (2 elem)
* OBJECT IDENTIFIER 1.2.840.113549.1.9.3 contentType (PKCS #9)
* SET (1 elem)
* OBJECT IDENTIFIER 1.2.840.113549.1.7.1 data (PKCS #7)
* SEQUENCE (2 elem)
* OBJECT IDENTIFIER 1.2.840.113549.1.9.5 signingTime (PKCS #9)
* SET (1 elem)
* UTCTime 2020-06-26 07:13:41 UTC
* SEQUENCE (2 elem)
* OBJECT IDENTIFIER 1.2.840.113549.1.9.4 messageDigest (PKCS #9)
* SET (1 elem)
* OCTET STRING (32 byte) 6558254059E939DF800A748CCF2F582371AC1… [message digest]
* SEQUENCE (2 elem)
* OBJECT IDENTIFIER 1.2.840.113549.1.9.15 sMIMECapabilities
* SET (1 elem)
* SEQUENCE (8 elem)
* SEQUENCE (1 elem)
* OBJECT IDENTIFIER 2.16.840.1.101.3.4.1.42 aes256-CBC (NIST Algorithm)
* SEQUENCE (1 elem)
* OBJECT IDENTIFIER 2.16.840.1.101.3.4.1.22 aes192-CBC (NIST Algorithm)
* SEQUENCE (1 elem)
* OBJECT IDENTIFIER 2.16.840.1.101.3.4.1.2 aes128-CBC (NIST Algorithm)
* SEQUENCE (1 elem)
* OBJECT IDENTIFIER 1.2.840.113549.3.7 des-EDE3-CBC (RSADSI encryptionAlgorithm)
* SEQUENCE (2 elem)
* OBJECT IDENTIFIER 1.2.840.113549.3.2 rc2CBC (RSADSI encryptionAlgorithm)
* INTEGER 128
* SEQUENCE (2 elem)
* OBJECT IDENTIFIER 1.2.840.113549.3.2 rc2CBC (RSADSI encryptionAlgorithm)
* INTEGER 64
* SEQUENCE (1 elem)
* OBJECT IDENTIFIER 1.3.14.3.2.7 desCBC
* SEQUENCE (2 elem)
* OBJECT IDENTIFIER 1.2.840.113549.3.2 rc2CBC (RSADSI encryptionAlgorithm)
* INTEGER 40
SEQUENCE (1 elem)
OBJECT IDENTIFIER 1.2.840.10045.4.3.2 ecdsaWithSHA256 (ANSI X9.62 ECDSA algorithm with SHA256)
OCTET STRING (1 elem)
SEQUENCE (2 elem)
INTEGER (384 bit) 37299296495250608665729486640423992…
INTEGER (383 bit) 16047350112473148250997959352782288…在计算CMS的签名时,我做错了什么?
https://stackoverflow.com/questions/63012836
复制相似问题