我正在 Ubuntu 16.04 LTS 服务器上为 Web 服务器设置 nginx 反向代理。
Ubuntu 上将运行三种不同的服务。服务将使用 API 调用相互通信。同样,客户端(浏览器/移动设备)将使用 API 调用与服务通信。
为了验证客户端 SSL 请求,我需要在服务器 PC 上安装证书。只有经过身份验证后,请求才会得到处理或转发以进行进一步处理。
每项服务我都有以下格式文件的证书。Ser1_cert.crt、Ser1_key-decryp.key、Ser1_keyfile.key、Ser1_exported.pfx
lly Ser2_...、Ser3_... 文件可用
对于 CA,我有 CA_50EA.crt、CA_50EA.pfx 文件可用
我不清楚应该使用哪种证书文件格式来安装证书。
要在系统上安装证书,我遵循以下步骤。1. 我将 .crt 扩展文件(包括 CA 文件)复制到 /usr/share/ca-certificates,然后运行以下命令。2. sudo dpkg-reconfigure ca-certificates
它显示了选择证书的用户界面,我选择了全部。最后它显示了添加的证书数量。
我在 nginx.conf 文件中正确输入了证书路径。我分别将 .crt 和 .key 文件复制到 /etc/ssl/certs/ 和 /etc/ssl/private/。
ssl_certificate "/etc/pki/certs/XServer_certificate.crt"; ssl_certificate_key "/etc/ssl/private/XServer_decryp.key";
现在我尝试从浏览器客户端登录到服务器,但登录证书验证失败,并显示以下服务器日志消息。
信息:LoginController[0]
认证错误:无法获取本地颁发者证书
为了再次确认,我将所有证书文件复制到 /usr/share/ca-certificates 目录中(共 14 个文件),然后再次执行“sudo dpkg-reconfigure ca-certificates”。这次也出现了同样的错误。
- 下次我运行“sudo update-ca-certificates --fresh”命令时,它显示已安装的证书编号,并带有 ca.pem 文件的警告,如下所示。
警告:CA_50EA.pem 不包含证书或 CRL:跳过 152 个添加,0 个删除;完成。
.pem 文件在 /etc/ssl/certs 文件夹中创建,但我只在 /usr/share/ca-certificates 中输入了 .crt 文件
我尝试使用以下命令进行验证,但还看到了与下面相同的问题。
openssl s_client -connect [服务器名称]:443 -showcerts -CAfile /etc/ssl/certs/ca-certificates.crt
......................... 验证返回代码:21(无法验证第一个证书)
它明确地表明验证失败。
我遗漏了哪些步骤,正确的做法是什么?看到错误,我以为 CA 安装不正确。
我阅读了很多博客,其中大多数解释相同,但对我来说没有用。
在我使用 CentOS7 之前的一段时间,我使用以下命令在系统上安装证书。update-ca-trust force-enable、update-ca-trust extract 在 CentOS 客户端中,使用上述命令可以顺利进行证书验证。
欢迎任何反馈。
谢谢
答案1
首先感谢大家,
我的问题是:在 CentOS 中成功安装的 CA 证书,但未在 Ubuntu 16 Server 中安装相同的证书,并出现以下警告信息。
警告:CA_50EA.pem 不包含证书或 CRL:跳过 152 个添加,0 个删除;完成。
解决方案:尝试了各种方法后,仍无法确定该问题的确切根源。突然想到一个主意,解决了我的问题。
使用以下 URL 步骤从 CA.pfx 文件创建了新的根 CA,并且它成功安装在 Ubuntu 16 Server 中,没有任何警告,并且成功验证了我的客户端请求。
https://www.itsupportmiami.com/how-to-convert-a-pfx-to-a-seperate-key-crt-file/
谢谢大家关注我的问题并尽力解答。