我一直在努力解决SSL问题超过1个月。
我们使用openssl生成自己的CA,服务器和客户端证书。我们也有 在Apache Web服务器上启用“SSLrequire”(在htaccess中这可能是错误的),这意味着任何人都试图通过https连接 服务器需要提供有效证书
步骤如下;
所以我们有自己的CA,用于签署我们的服务器和客户端证书。
下一步
所以我们有我们的服务器证书&我们在服务器上成功安装的服务器私钥
接下来我们
然后,我们将客户端证书与CA证书一起分发给我们的用户。 两者都安装在他们的浏览器中。
尝试连接时,我们得到了“Peer无法识别并信任颁发证书的CA. “错误。
我们发现问题是服务器上未安装自签名CA证书。通常是服务器 将向尝试连接到该设备的设备显示可信CA的列表,并且设备必须发送证书 已由服务器提供的任何CA签署。但是自从我们签了CA证书 没有安装在服务器上,浏览器可以提供一个可以接受的证书 服务器
所以我们在服务器 - 控制面板Hsphere上安装了CA证书。
我们获取了ca证书的内容并将其复制到服务器上的“证书颁发机构文件”文本区域中 并且服务器不会每次都抱怨“无法更新SSL配置不同的密钥和证书”
CA证书已经自行签名,因此服务器如何说证书和密钥不同。
我们还尝试将CA证书文件和CA密钥文件的内容复制到“证书颁发机构文件”文本区域,但这也不起作用。
正如我所说,我们一直在努力奋斗一个多月。如果有人能提供帮助,那将非常感激。 如果我们需要支付服务费用,请告诉我们。
提前致谢。
答案 0 :(得分:13)
(也许https://serverfault.com/可能是这个问题的更好地方。)
以下是您可以在Apache Httpd配置中使用的一些选项(我不确定它是如何映射到您的配置面板的。)
SSLCertificateFile /etc/ssl/certs/host.pem
SSLCertificateKeyFile /etc/ssl/private/host.key
SSLCACertificatePath /etc/ssl/certs/trusteddir
#SSLCACertificateFile /etc/ssl/certs/trustedcert.pem
#SSLCADNRequestFile /etc/ssl/certs/advertisedcas.pem
SSLCertificateFile
和SSLCertificateKeyFile
是在您的服务器上启用SSL的基本要求。
因为您需要客户端证书身份验证,所以需要配置SSLCACertificatePath
(对于目录)或SSLCACertificateFile
(对于文件)之一来说明您要信任哪些CA,因此请添加CA证书在那里。这些应该是PEM格式的文件。其中的任何证书都将被视为受信任(尽管它可能需要具有CA基本约束,但我不记得,如果您自己生成了根CA证书,则这是非常标准的。)
除此之外,您还可以将证书放在SSLCADNRequestFile
中。这不应该是必要的,因为它是从SSLCACertificatePath
或SSLCACertificateFile
证书指令自动填充的,但是如果你想要更多地控制服务器宣传的CA列表,它可以接受,那就是在哪里做。只是为了澄清,这不是管理客户端证书信任的原因,而是服务器宣传它可能信任的内容,因此您仍然需要SSLCACertificatePath
或SSLCACertificateFile
。您的配置面板中的“证书颁发机构文件”选项可能控制了该选项,而不是其他两个选项之一。
调试此方法的一种方法是在命令行执行此操作:
echo | openssl s_client -showcerts -connect www.your.host.example:443
这应该列出你首先出现的证书链(它有利于它向CA提供完整的链,因为有些客户似乎有时需要它,据我记得)。然后,它应该列出它愿意接受的CA用于客户端证书身份验证,或者没有发送客户端证书CA名称(在这种情况下,上面提到的某个指令存在问题)。这将至少为您提供SSLCADNRequestFile
或SSLCACertificatePath
/ SSLCACertificateFile
的配置方式(尽管最后两个是重要的)。