我已经实现了相互证书身份验证,并且它成功地完成了以下步骤:
- 创建根 ca(自签名)
- 创建服务器证书并使用 ca 私钥对其进行签名
- 创建用户证书并使用 ca 私钥对其进行签名
- 将 server.crt 作为浏览器的“权限”导入,将 user.crt 作为“您的证书”导入
配置 ssl.conf 添加这些行:
SSLCertificateKeyFile /home/safaa/rootca/certs/server.key SSLCertificateFile /home/safaa/rootca/certs/server.crt SSLCACertificateFile /home/safaa/rootca/certs/rootca.crt SSLVerifyDepth 10 SSLVerifyClient require
现在我已将中级证书添加到我的流程图中,步骤已变为:
- 创建根CA(自签名)
- 创建服务器CA并使用CA私钥对其进行签名
- 创建服务器证书并使用服务器 CA 私钥对其进行签名
- 创建用户证书并使用服务器 CA 私钥对其进行签名
- 将 server.crt 作为浏览器的“权限”导入,将 user.crt 作为“您的证书”导入
配置 ssl.conf 添加这些行:
SSLCertificateKeyFile /home/safaa/serverCA/certs/server.key SSLCertificateFile /home/safaa/serverCA/certs/server.crt SSLCACertificateFile /home/safaa/serverCA/certs/serverCA.crt SSLVerifyDepth 10 SSLVerifyClient require
现在,当我尝试重新启动 httpd 服务时: service httpd restart 我得到
#sudo service httpd start
Starting httpd: [FAILED]
#sudo service httpd status
httpd is stopped
我尝试过注释和取消注释行,但未能成功
SSLCertificateChainFile /home/safaa/rootca/certs/rootca.crt
SSLCACertificateFile /home/safaa/serverCA/certs/serverCA.crt
另外,我生成的每个证书都进行了验证,所有五个证书都验证正常,我还更改了 rootca && serverCA 文件夹的所有者和权限,并使它们与 ssl.conf 相同 ps:我正在运行我的bash 用于 php 。
我错过了什么?有人告诉我,我可以在 Linux 中使用可信存储库而不是配置 ssl,这可能吗?在哪里将我的 ca 添加到 Linux 以使其将其视为 verisign!?
答案1
回答老问题,因为这是在寻找另一个答案时提出的建议:
一般来说,您不需要将服务器证书添加到浏览器,除非它是自签名的。这就是信任链的全部目的。如果您不在任何地方使用根作为信任锚,那么经历创建中间 CA 的麻烦是毫无意义的。
我也不认为您完全理解这些指令的用途或效果。我建议在 Apache 文档中查看它们这里。我想你可能首先要寻找的是SSLCA证书文件
至于我最初的评论,根据文档,SSL证书文件还应该从同一文件加载中间证书(只需将中间证书和(可选?)根证书附加到 server.crt )。这应该允许您将根 CA 的证书作为受信任的 CA 而不是单个服务器证书导入到您的浏览器。
也可以看看:这个答案有关相互认证的更多讨论。