8

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

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

步骤如下;

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

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

下一步

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

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

接下来我们

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

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

尝试连接时,我们收到“对等方无法识别和信任颁发您的证书的 CA。”错误。

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

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

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

CA证书是自己签名的,服务器怎么能说证书和密钥不同。

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

正如我所说,我们已经为此苦苦挣扎了一个多月。如果有人可以提供帮助,那将不胜感激。如果我们必须为服务付费,请告知我们。

提前致谢。

4

1 回答 1

14

(也许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. 这应该不是必需的,因为它是从SSLCACertificatePathorSSLCACertificateFile证书指令自动填充的,但是如果您想对服务器宣传它可能接受的 CA 列表进行更多控制,那就是这样做的地方。澄清一下,这不是管理客户端证书信任的东西,而是服务器宣传它可能信任的东西,所以你仍然需要SSLCACertificatePathor SSLCACertificateFile。也许您的配置面板中的“证书授权文件”选项控制了该选项,而不是其他两个选项之一。

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

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

这应该列出您首先提供的证书链(据我所知,最好将完整的链提供给 CA,因为某些客户有时似乎需要它)。然后,它应该列出它愿意接受客户端证书身份验证的 CA,或者没有发送客户端证书 CA 名称(在这种情况下,上述指令之一存在问题)。这将至少为您提供有关如何配置SSLCADNRequestFileSSLCACertificatePath/SSLCACertificateFile已配置的指示(尽管最后两个很重要)。

于 2010-08-13T11:52:21.333 回答