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

时间:2010-08-13 11:21:59

标签: ssl client openssl self-signed ca

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

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

步骤如下;

  • 生成CA密钥
  • 生成CA CSR
  • 使用CA密钥签署CA CSR

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

下一步

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

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

接下来我们

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

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

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

我们发现问题是服务器上未安装自签名CA证书。通常是服务器 将向尝试连接到该设备的设备显示可信CA的列表,并且设备必须发送证书 已由服务器提供的任何CA签署。但是自从我们签了CA证书 没有安装在服务器上,浏览器可以提供一个可以接受的证书 服务器

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

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

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

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

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

提前致谢。

1 个答案:

答案 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

SSLCertificateFileSSLCertificateKeyFile是在您的服务器上启用SSL的基本要求。

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

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

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

echo | openssl s_client -showcerts -connect www.your.host.example:443

这应该列出你首先出现的证书链(它有利于它向CA提供完整的链,因为有些客户似乎有时需要它,据我记得)。然后,它应该列出它愿意接受的CA用于客户端证书身份验证,或者没有发送客户端证书CA名称(在这种情况下,上面提到的某个指令存在问题)。这将至少为您提供SSLCADNRequestFileSSLCACertificatePath / SSLCACertificateFile的配置方式(尽管最后两个是重要的)。