1

想获得一些关于设置简单的 2 路 apache SSL 的建议。

我们使用 openSSL 创建了一个密钥文件和 csr 请求。然后我们将其提交给 CA 并收到一个带有 CA 的 crt 文件的 crt 文件。

我们已经配置了 apache http.conf 文件并在加载 mod_ssl 模块后添加了以下参数。

SSLEngine开启

SSLCACertificateFile /local/fast/fcHome/deployment/apache01/conf/ssl.crt/ca.crt - 随证书收到的 CA 根证书

SSLCertificateFile /local/fast/fcHome/deployment/apache01/conf/ssl.crt/server.crt - 从 CA 收到的用于服务器的 crt 文件

SSLCertificateKeyFile /local/fast/fcHome/deployment/apache01/conf/ssl.key/server.key - 用于生成 csr 的密钥文件

SSLVerifyClient需要

SSL验证深度 10

然后我们有一个客户端,他也在使用由同一 CA 签名的证书,试图连接到 https 服务。客户端在连接时收到 SSL 握手错误。

apache 错误日志显示以下内容:

ssl_engine_kernel.c(1884):OpenSSL:写入:SSLv3 读取客户端证书 B ssl_engine_kernel.c(1903):OpenSSL:退出:SSLv3 读取客户端证书 B 中出错 ssl_engine_kernel.c(1903):OpenSSL:退出:SSLv3 读取客户端出错证书 B SSL 库错误:336105671 错误:140890C7:SSL 例程:SSL3_GET_CLIENT_CERTIFICATE:对等方未返回证书 服务器没有已知的 CA 进行验证?

我似乎无法弄清楚这是为什么。即使客户端证书由 Versign 签名,它是否可能与服务器的 CA.crt 文件不匹配?

任何帮助将不胜感激

4

2 回答 2

2

SSLCACertificateFile必须包含您的客户端的证书颁发机构证书以及任何中间证书文件,所有这些都连接在一起。

您还缺少SSLCertificateChainFile,它必须指向一个包含服务器证书颁发机构证书以及任何中间证书文件的文件,所有这些文件都连接在一起。

显然,客户端(浏览器)必须安装自己的客户端证书。

注意:从 2.4.8 版本开始,作为官方 apache 文档, SSLCertificateChainFile已过时(感谢 ezra-s 的评论)。现在可以将服务器证书和 CA 中间证书直接连接到 SSLCertificateFile。

于 2013-11-13T15:58:03.910 回答
0

客户端必须提供客户端证书才能连接到服务器。

例如在 python 中:

import requests

cert = (client_cert_file_path, client_key_file_path)

resp = requests.get(url, cert=cert, verify=False)
于 2019-05-30T13:25:10.867 回答