Apache 是否需要了解客户端身份验证的中间证书?

Vic*_*nin 6 certificate ssl-certificate certificate-authority apache-2.2

我有以下证书层次结构。我需要在 Apache 上进行客户端身份验证。

.
??? root (CA) - self signed
    ??? intermediate 1 (CA)
    |   ??? client1
    |   ??? client2
    ??? intermediate 2 (CA)
        ??? client3
        ??? client4
Run Code Online (Sandbox Code Playgroud)

谁应该存储中间证书(客户端或服务器)?

我宁愿只在服务器上存储一个根 CA 来验证所有客户端证书。主要原因是中间 CA 的列表可以增长,我不想更新存储在 Apache 配置中的所有时间证书。

这在技术上可行吗?SSL 协议是否要求客户端发送整个链?

关于这个问题的一个想法。据我了解,当客户端对服务器进行身份验证时,服务器会将整个链发送给客户端。我希望它是对称的,当服务器需要对客户端进行身份验证时,发送整个链是客户端的责任。

jor*_*ane 1

当客户端对服务器进行身份验证时,服务器将发送 中定义的链SSLCertificateChainFile,这是您作为服务器管理员的责任。所以当客户端标识自己时,它也负责发送整个链。Apache 只需要知道您在SSLCACertificateFile. 您还可以自行决定在此处定义链,这将使 Apache 对于不自行发送链的客户端更加宽容。

当您为用户签署证书时,请确保为用户提供正确的链。您的用户可以使用以下 OpenSSL 命令构建 .p12:

openssl pkcs12 -export -in ${SIGNED_CERT} -inkey ${PRIVATE_KEY} \
     -name ${USERNAME} -out ${OUTPUT_P12} -certfile ${PROVIDED_CHAIN}
Run Code Online (Sandbox Code Playgroud)