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

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

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

.
└── root (CA) - self signed
    ├── intermediate 1 (CA)
    |   ├── client1
    |   ├── client2
    └── intermediate 2 (CA)
        ├── client3
        └── client4

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

我更愿意在服务器上只存储一个根 CA,以便根据它验证所有客户端证书。主要原因是中间 CA 列表可能会增长,而且我不想一直更新存储在 Apache 配置中的证书。

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

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

答案1

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

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

openssl pkcs12 -export -in ${SIGNED_CERT} -inkey ${PRIVATE_KEY} \
     -name ${USERNAME} -out ${OUTPUT_P12} -certfile ${PROVIDED_CHAIN}

相关内容