gpt4 book ai didi

java - 为什么 Symantec CSR 检查程序认为我的 CSR 在 AlgorithmIdentifier 中缺少 NULL 值? RFC3279

转载 作者:行者123 更新时间:2023-11-30 07:52:16 30 4
gpt4 key购买 nike

由于一些不愉快的原因,我一直在尝试使用 bouncycaSTLe API 手动构建我自己的证书签名请求。

从表面上看,我选择这样做是因为我需要 CSR 的预签名版本,以便使用存储在 HSM 中的 key 生成 sha256withRSA 签名,该 key 在 LMK 下加密,因此此时无法立即使用企业社会责任创建。

无论如何,在这一点上这是偶然的。

通过与使用 openSSL 生成的其他 CSR 进行比较,我设法创建了一个 CSR 结构,向其中添加了所需的信息,将其发送到 HSM 以使用私钥生成签名,取回该签名,然后将其附加给 CSR。

然后我将我生成的证书插入到几个 CSR 检查器中,尤其是 Symantec 的,因为我相信这是我们的 CA,他必须签署它。

symantec CSR 检查器自信地告诉我:

The CSR is missing a NULL value in its AlgorithmIdentifier parameter

嗯。好的。

然后它给出了一个好的例子:

An example of a good AlgorithmIdentifier parameter in a CSR

这是我将这个特定的 NULL 值添加到 AlgorithmIdentifier 对象的代码:

    ASN1EncodableVector topLevelPublicKeySequenceVector = new ASN1EncodableVector();
ASN1EncodableVector publicKeySequenceVector = new ASN1EncodableVector();
AlgorithmIdentifier rsaEncryptionOid = new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, DERNull.INSTANCE);

ASN1Integer pkModulus = new ASN1Integer(publicKey.getModulus());
ASN1Integer pkExponent = new ASN1Integer(publicKey.getPublicExponent());
publicKeySequenceVector.add(pkModulus);
publicKeySequenceVector.add(pkExponent);
DERSequence publicKeySequence = new DERSequence(publicKeySequenceVector);
DERBitString publicKeyBitString = null;
try {
publicKeyBitString = new DERBitString(publicKeySequence);
} catch (IOException e1) {
e1.printStackTrace();
}

topLevelPublicKeySequenceVector.add(rsaEncryptionOid);
topLevelPublicKeySequenceVector.add(publicKeyBitString);

DERSequence topLevelPublicKeySequence = new DERSequence(topLevelPublicKeySequenceVector);

因此,如果我将我的 CSR 放入 ASN.1 解码器中,查看此 AlgorithmIdentifier 参数并验证它确实缺少此 NULL 值,我将得到以下输出(包含以下的虚假值StackOverflow 的好处),这表明我的 NULL 值似乎就在我期望的位置:

SEQUENCE(3 elem)
SEQUENCE(3 elem)
INTEGER 0
SEQUENCE(7 elem)
SET(1 elem)
SEQUENCE(2 elem)
OBJECT IDENTIFIER 2.5.4.6 countryName (X.520 DN component)
PrintableString GB
SET(1 elem)
SEQUENCE(2 elem)
OBJECT IDENTIFIER 2.5.4.8 stateOrProvinceName (X.520 DN component)
UTF8String Sol
SET(1 elem)
SEQUENCE(2 elem)
OBJECT IDENTIFIER 2.5.4.7 localityName (X.520 DN component)
UTF8String Earth
SET(1 elem)
SEQUENCE(2 elem)
OBJECT IDENTIFIER 2.5.4.10 organizationName (X.520 DN component)
UTF8String Stackoverflow
SET(1 elem)
SEQUENCE(2 elem)
OBJECT IDENTIFIER 2.5.4.11 organizationalUnitName (X.520 DN component)
UTF8String Stackoverflow
SET(1 elem)
SEQUENCE(2 elem)
OBJECT IDENTIFIER 2.5.4.3 commonName (X.520 DN component)
UTF8String common.name.for.stackoverflow
SET(1 elem)
SEQUENCE(2 elem)
OBJECT IDENTIFIER 1.2.840.113549.1.9.1 emailAddress (PKCS #9)
IA5String duff.value@forstackoverflow.com
SEQUENCE(2 elem)
SEQUENCE(2 elem)
OBJECT IDENTIFIER 1.2.840.113549.1.1.1 rsaEncryption (PKCS #1)
NULL
BIT STRING(1 elem)
SEQUENCE(2 elem)
INTEGER(2048 bit) 231457529965blahblahetc
INTEGER65537
SEQUENCE(2 elem)
OBJECT IDENTIFIER 1.2.840.113549.1.1.11 sha256WithRSAEncryption (PKCS #1)
NULL
BIT STRING(2048 bit) 1011010etc etc...

因此,对于我描述这个问题时略带迂回的方式,我深表歉意,有没有人知道为什么我的 CSR 会因缺少的字段而无法通过验证,也就是说,它会出现,但实际上并没有丢失?

编辑:这是实际的请求(或者至少,为了这个问题的目的,我用具有相同症状的无意义值生成的请求)

-----BEGIN CERTIFICATE REQUEST-----
MIIC6zCCAdMCAQAwgaUxCzAJBgNVBAYTAkdCMQwwCgYDVQQIDANTb2wxDjAMBgNV
BAcMBUVhcnRoMRYwFAYDVQQKDA1TdGFja292ZXJmbG93MRYwFAYDVQQLDA1TdGFj
a292ZXJmbG93MRgwFgYDVQQDDA93d3cuZXhhbXBsZS5jb20xLjAsBgkqhkiG9w0B
CQEWH2R1ZmYudmFsdWVAZm9yc3RhY2tvdmVyZmxvdy5jb20wggEiMA0GCSqGSIb3
DQEBAQUAA4IBDwAwggEKAoIBAQDrH2qNz5wtTc9jFQPoTfdk1Mf9N1LGXrqyV5sA
1w9Y4BGGJNm3yW0KUPLxyHhSJLWzHqdKzcLwlocSJvYVrMmBG9agOnHhX1aQLrnr
ruEAP7aN/gHW9isQLk6/MJPt8TkIby6azR0qq4VYR/+6dRCv7PhVvGBMxWjdQbEa
UxJAyq3eVMNBMdDdrOIMLrvxF3xcido4O9qWtdXFQwUgXoUGJG0sY3tXpwE5jB7A
1MWayfbSXj2NATU9fqHhwEoPwBm4yw65Hg+VDHWABCR/qYmLQKrVThF9UE4RUy5I
+DMRoTOUX3YRqZkg3aaCfe/LtuoHhfsCSZwxak2GZ1TI8vWBAgMBAAGgADANBgkq
hkiG9w0BAQsFAAOCAQEAoqTYzypOlLKSrF4+5jKqbRgC+9JBUhYKmQcAIaDzmDNf
0ZHwxG4iGeCS5pj60MKpv6gxUZcLhwgcm717XZrMMR4dD9yILyJsFp7C8MnOgYpB
C/VzSBwH8FvmnVsSmOcAR8IcvXLW2BpTgH6tSiFsU+xlpUWUUceFL97xZAiM93cZ
tdsH6KbKo/YvCbKhGkX311S+oTPk1oSvu5znRXBl2iyk3wbFiC9blARIcfYlhGPH
gL/ic+7+Mn5qmOY8w39Y42aP/G4ISG8h52Q1pbxH7B/I++sK73yTwRZCf1tprMP6
27j3Bpr72VY1Egge97rrb8KcL+K+A84/74Ad7NNywQ==
-----END CERTIFICATE REQUEST-----

最佳答案

错误信息完全错误。应该说 PKCS#10 请求签名验证失败:)

Details of your PKCS#10 request in xca

尝试使用 openssl/xca/certreq 生成 PKCS#10 请求,并将签名算法 oid 的值更改为其他值。

关于java - 为什么 Symantec CSR 检查程序认为我的 CSR 在 AlgorithmIdentifier 中缺少 NULL 值? RFC3279,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46078230/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com