为了签署PDF,我使用signDetached。
...
OcspClient ocspClient = new OcspClientBouncyCastle();
MakeSignature.signDetached(appearance, digest, pks, chain, crlList, ocspClient, tsaClient, estimatedSize, subfilter);
PDF签名没有错误,但是缺少嵌入式OCSP响应:
如何在不验证OCSP响应的情况下强制signDetached嵌入OCSP状态(或传递给signDetached,使responderCert信任)?
此外
当我尝试通过com.itextpdf.text.pdf.security.OCSPVerifier验证OCSP状态时验证 我收到错误:
Java::JavaSecurity::SignatureException: certificate does not verify with supplied key
在这种情况下,我们使用瑞士政府CA:
Swiss Government Root CA I
`- Swiss Government Enhanced CA 01 < issuer certificate
`- Mor... < signature certificate
OCSP回复由以下人员签署:
Swiss Government Root CA II
`- Swiss Government SSL CA 01
`- Swiss Government OCSP < OCSP responderCert
此处提供了根证书和中间证书:
答案 0 :(得分:1)
......然而,嵌入式OCSP响应丢失了......
检查样本PDF可以清楚地看到嵌入了OCSP响应:
6469 3174: SEQUENCE {
6473 9: OBJECT IDENTIFIER '1 2 840 113583 1 1 8'
6484 3159: SET {
6488 3155: SEQUENCE {
6492 791: [0] {
6496 787: SEQUENCE {
6500 783: SEQUENCE {
.... CRL for CA certificate ....
: }
: }
: }
7287 2356: [1] {
7291 2352: SEQUENCE {
7295 2348: SEQUENCE {
7299 1: ENUMERATED 0
7302 2341: [0] {
7306 2337: SEQUENCE {
7310 9: OBJECT IDENTIFIER
: ocspBasic (1 3 6 1 5 5 7 48 1 1)
7321 2322: OCTET STRING, encapsulates {
7325 2318: SEQUENCE {
7329 270: SEQUENCE {
7333 97: [1] {
7335 95: SEQUENCE {
7337 11: SET {
7339 9: SEQUENCE {
7341 3: OBJECT IDENTIFIER
: countryName (2 5 4 6)
7346 2: PrintableString 'CH'
: }
: }
7350 29: SET {
7352 27: SEQUENCE {
7354 3: OBJECT IDENTIFIER
: organizationName (2 5 4 10)
7359 20: UTF8String 'Swiss Government PKI'
: }
: }
7381 17: SET {
7383 15: SEQUENCE {
7385 3: OBJECT IDENTIFIER
: organizationalUnitName (2 5 4 11)
7390 8: UTF8String 'Services'
: }
: }
7400 30: SET {
7402 28: SEQUENCE {
7404 3: OBJECT IDENTIFIER
: commonName (2 5 4 3)
7409 21: UTF8String 'Swiss Government OCSP'
: }
: }
: }
: }
.... remainder of OCSP response for signer certificate
: }
: }
: }
这样回答这个问题:
如何在不验证OCSP响应的情况下强制signDetached嵌入OCSP状态(或传递给signDetached,使responderCert信任)?
没有必要强迫,iText确实嵌入了检索到的OCSP响应而无需进一步检查(快速代码审查支持此功能)。
但是,您对瑞士政府CA及其证书结构遇到麻烦仍然不足为奇。
根据RFC 2560(明确引用PDF规范ISO 32000-1,因此,尽管已被RFC 6960废弃,但仍必须在此处使用):
依赖OCSP响应的系统或应用程序......必须拒绝 如果证书需要验证签名的响应 响应无法满足以下至少一个标准:
匹配的OCSP签名权限的本地配置 有问题的证书;或
是否颁发证书的CA的证书 题;或
- 醇>
在ExtendedKeyUsage中包含id-ad-ocspSigning的值 扩展并由颁发证书的CA颁发 。问题&#34;
对于瑞士政府CA签名,这意味着:
因此,通常必须拒绝那些OCSP回复。
如果您还查看较新的RFC 6960,您会看到:
注意:为了向后兼容RFC 2560 [RFC2560],它不是 禁止为授权响应者颁发证书 使用与用于发布的密钥不同的发布密钥 正在检查撤销证书。但是,这样的 由于客户不是,所以强烈建议不要这样做 需要识别具有此类证书的响应者 授权响应者。
所以现在瑞士政府CA使用的证书结构明显是强烈劝阻(这实际上意味着如果能够/允许,IETF会禁止它。)