具有自签名CA的客户端SSL无法正常工作

ica*_*rus 8 ssl client openssl ca self-signed

我一直在努力解决SSL问题超过1个月.

我们使用openssl生成自己的CA,服务器和客户端证书.我们还在Apache Web服务器上启用了"SSLrequire"(在htaccess中这可能是错误的),这意味着任何尝试通过服务器上的https连接的人都需要提供有效的证书

步骤如下;

  • 生成CA密钥
  • 生成CA CSR
  • 使用CA Key对CA CSR进行签名

所以我们有自己的CA,用于签署我们的服务器和客户端证书.

下一步

  • 生成服务器密钥
  • 生成服务器CSR
  • 使用CA Key签署服务器CSR

所以我们有服务器证书和服务器私钥,我们在服务器上成功安装

接下来我们

  • 生成客户端密钥
  • 生成客户CSR
  • 使用CA Key签署客户CSR

然后,我们将客户端证书与CA证书一起分发给我们的用户.两者都安装在他们的浏览器中.

在尝试连接时,我们得到了"Peer无法识别并信任颁发证书的CA."错误.

我们发现问题是服务器上未安装自签名CA证书.通常,服务器会向尝试连接到它的设备显示可信CA的列表,并且设备必须发送已由服务器提供的任何CA签名的证书.但由于我们的自签名CA证书未安装在服务器上,因此浏览器可以提供服务器可接受的证书.

所以我们在服务器 - 控制面板Hsphere上安装了CA证书.

我们获取了ca证书的内容并将其复制到服务器上的"证书颁发机构文件"文本区域中,并且服务器不会每次都抱怨它"无法更新SSL配置不同的密钥和证书"

CA证书已经自行签名,因此服务器如何说证书和密钥不同.

我们还尝试将CA证书文件和CA密钥文件的内容复制到"证书颁发机构文件"文本区域,但这也不起作用.

正如我所说,我们一直在努力争取一个多月.如果有人能提供帮助,那将非常感激.如果我们需要支付服务费用,请告诉我们.

提前致谢.

Bru*_*uno 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
Run Code Online (Sandbox Code Playgroud)

SSLCertificateFile并且SSLCertificateKeyFile是在服务器上启用SSL的基本要求.

因为您需要客户端证书身份验证,所以需要配置SSLCACertificatePath(对于目录)或SSLCACertificateFile(对于文件)中的一个来说明您要信任的CA,因此在那里添加CA证书.这些应该是PEM格式的文​​件.其中的任何证书都将被视为受信任(尽管它可能需要具有CA基本约束,但我不记得,如果您自己生成了根CA证书,则这是非常标准的).

除此之外,您还可以将证书放入SSLCADNRequestFile.这不应该是必要的,因为它是从证书SSLCACertificatePathSSLCACertificateFile证书指令自动填充的,但是如果你想要更多地控制服务器所宣传的CA列表,它可以接受,那就是在哪里做.只是为了澄清,这不是管理客户端证书信任的原因,而是管理服务器宣传它可能信任的内容,因此您仍然需要SSLCACertificatePathSSLCACertificateFile.也许您的配置面板中的"证书颁发机构文件"选项控制了该选项,而不是其他两个选项之一.

调试此方法的一种方法是在命令行执行此操作:

echo | openssl s_client -showcerts -connect www.your.host.example:443
Run Code Online (Sandbox Code Playgroud)

这应该列出你首先出现的证书链(它有利于它向CA提供完整的链,因为有些客户似乎有时需要它,据我记得).然后,它应列出它愿意接受的CA以进行客户端证书身份验证,否则将列出未发送的客户端证书CA名称(在这种情况下,上述某个指令存在问题).这会给你至少如何指示SSLCADNRequestFileSSLCACertificatePath/ SSLCACertificateFile已配置(虽然它的最后两个说事).