2

我在 Windows 上设置 Apache 2.4.29 以使用有效的 OCSP 响应程序进行客户端身份验证时遇到问题。关闭 OCSP 响应程序时,客户端身份验证工作正常。当我手动使用 OpenSSL 向 OCSP 响应程序发出请求时,我还能够验证我的客户端证书状态是否为“良好”。这只是在 Apache 中使用它时的一个问题......

证书颁发机构(我充当自己的 CA):

  • 根 CA > 中间 CA

  • 中间 CA > 客户端证书 1

  • 中间 CA > OCSP 签名证书

证书文件

  • ca-chain.cert.pem(根 CA 和中间 CA 证书)

  • middle.cert.pem(中间 CA 证书)

  • ocsp.mydomain.com.cert.pem(OCSP 签名证书)

  • client1.cert.pem(客户端证书)

Windows 安装程序

  • 根 CA 和中间 CA 证书连同其私钥(导入为 .pfx)分别导入“受信任的根证书颁发机构”和“中间证书颁发机构”存储中
  • 客户端证书连同其私钥(导入为 .pfx)一起导入“个人”证书存储

OCSP 响应服务器

openssl ocsp -port ocsp.mydomain.com:2560 -text -sha256 \
    -index intermediate/index.txt \
    -CA intermediate/certs/ca-chain.cert.pem \
    -rkey intermediate/private/ocsp.mydomain.com.key.pem \
    -rsigner intermediate/certs/ocsp.mydomain.com.cert.pem

手动 OCSP 请求(只是为了确认所有设置都在 Apache 之外)

  • 要求

    openssl ocsp -CAfile intermediate/certs/ca-chain.cert.pem \
        -url http://ocsp.mydomain.com:2560 -resp_text \
        -issuer intermediate/certs/intermediate.cert.pem \
        -cert intermediate/certs/client1.cert.pem
    
  • 响应(...代表一些排除的详细输出,实际上不在响应中)

    ...
    Certificate ID:
        ...
        Issuer Key Hash: 6FBE86C0DE4500EE4945D1ECC3E41F9DACF5CEEC
        ...
    ...
    Response verify OK
    intermediate/certs/client1.cert.pem: good
    
  • 上面的“颁发者密钥哈希”与我的“个人”证书存储中的客户端证书“授权密钥标识符”匹配,看起来都不错

阿帕奇设置

SSLVerifyClient require
SSLVerifyDepth 10
SSLOCSPEnable on
SSLOCSPDefaultResponder "http://ocsp.mydomain.com:2560"
SSLCACertificateFile "${SRVROOT}/conf/ssl/ca-chain.cert.pem"

阿帕奇错误

库错误:OCSP_basic_verify:root ca 不受信任(下面的日志信息)

    1973: connecting to OCSP responder 'ocsp.mydomain.com:2560'
    1975: sending request to OCSP responder
    AH02275: Certificate Verification, depth 2, CRL checking mode: none (0) [subject: CN=Generic Code Root CA,O=Generic Code,ST=New York,C=US / issuer: CN=Generic Code Root CA,O=Generic Code,ST=New York,C=US / serial: B0992B306BCDD3BD / notbefore: Mar 10 21:09:10 2018 GMT / notafter: Mar  5 21:09:10 2038 GMT]
    AH02275: Certificate Verification, depth 1, CRL checking mode: none (0) [subject: CN=Generic Code Intermediate CA,O=Generic Code,ST=New York,C=US / issuer: CN=Generic Code Root CA,O=Generic Code,ST=New York,C=US / serial: 1000 / notbefore: Mar 10 21:20:32 2018 GMT / notafter: Mar  7 21:20:32 2028 GMT]
    _util_ocsp.c(96):1973: connecting to OCSP responder 'ocsp.mydomain.com:2560'
    _util_ocsp.c(124):1975: sending request to OCSP responder
    _util_ocsp.c(234): 1981: OCSP response header: Content-type: application/ocsp-response
    _util_ocsp.c(234): 1981: OCSP response header: Content-Length: 2270
    _util_ocsp.c(282): 1987: OCSP response: got 2270 bytes, 2270 total
    1925: failed to verify the OCSP response
    Library Error: error:27069070:OCSP routines:OCSP_basic_verify:root ca not trusted
    AH02276: Certificate Verification: Error (50): application verification failure [subject: CN=Generic Code Intermediate CA,O=Generic Code,ST=New York,C=US / issuer: CN=Generic Code Root CA,O=Generic Code,ST=New York,C=US / serial: 1000 / notbefore: Mar 10 21:20:32 2018 GMT / notafter: Mar  7 21:20:32 2028 GMT]
    2008: library error 1 in handshake (server localhost:443)
    Library Error: error:14089086:SSL routines:ssl3_get_client_certificate:certificate verify failed
    1998: Connection closed to child 38 with abortive shutdown (server localhost:443)

Apache 命中时的 OCSP 响应程序服务器错误响应

  • 响应(...代表一些排除的详细输出,实际上不在响应中)

    ...
    Certificate ID:
        ...
        Issuer Key Hash: 79D4440D1471385397B194EF1038CEEEEFBBAC24
        ...
    Cert Status: unknown
    ...
    
  • 上面的“颁发者密钥哈希”与我的“受信任的根证书颁发机构”证书存储中的根 CA证书“授权密钥标识符”匹配,WTF?为什么?

任何人都可以看到我所做的事情有什么问题,或者知道为什么这不起作用吗?

4

1 回答 1

0

我得到了这个工作。

  • 使用 OCSP 信息重新颁发中间 CA
  • 为中间 CA 上的 OCSP 信息设置第二个 OCSP 响应者,第二个 OCSP 响应者签名证书由根 CA 签名
  • 重新运行测试,现在一切正常

看起来 mod_ssl 必须验证整个证书链,而不是在客户端证书本身停止。我希望它是可配置的,但目前不是...

于 2018-03-12T18:37:49.813 回答