Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有自签名CA的客户端SSL不工作_Ssl_Client_Openssl_Self Signed_Ca - Fatal编程技术网

具有自签名CA的客户端SSL不工作

具有自签名CA的客户端SSL不工作,ssl,client,openssl,self-signed,ca,Ssl,Client,Openssl,Self Signed,Ca,我已经与SSL问题斗争了一个多月 我们已经使用openssl生成了我们自己的CA、服务器和客户端证书。我们也有 在Apache web服务器上启用“SSLrequire”(在htaccess中,这可能是错误的),这意味着任何试图通过网络上的https进行连接的人 服务器需要提供有效的证书 步骤如下: 生成CA密钥 生成CA CSR 使用CA密钥对CA CSR进行签名 因此,我们有自己的CA,用于签署服务器和客户端证书 下一步 生成服务器密钥 生成服务器CSR 使用CA密钥对服务器CSR进行

我已经与SSL问题斗争了一个多月

我们已经使用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证书

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

CA证书已经由它自己签名,所以服务器怎么能说证书和密钥是不同的呢

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

正如我所说,我们已经为此奋斗了一个多月。如果有人能帮忙,我将不胜感激。 如果我们必须为服务付费,请告诉我们

提前谢谢。

(也许是回答这个问题的好地方。)

这里有几个选项可以在apachehttpd配置中使用(我不确定这是如何映射到您的配置面板的)

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
的指示(尽管这是最后两个问题)。

您可能想试试serverfault.com,更可能找到使用过hsphere的管理员。遗憾的是,我只能给出+1:指定PEM,CA基本约束,阐明了服务器信任与客户端信任以及openssl s_client-showcerts,每一个都有自己的优点。
echo | openssl s_client -showcerts -connect www.your.host.example:443