我有一台服务器,它有一个自签名证书,我正尝试安全地访问它。我通过查看 的输出获得了证书openssl s_client -connect <ip>
,并将其复制到 testcert.pem,然后尝试将其与 一起使用curl --cacert testcert.pem <url>
。然而,这没有奏效,我的研究让我相信问题可能出在证书中显示 的那一行Subject: CN=id23946
。
显然,我需要在系统上的某个位置存储一个别名,将 id23946 链接到 IP 地址,但我找不到有关如何执行此操作的任何信息。那么,我该怎么做呢?如何让 curl 验证此证书是否有效?
编辑:我知道我可以通过添加<ip> id23946
到我的 hosts 文件然后使用 id23946 作为地址来连接到服务器,但我真的更希望能够直接连接到服务器的实际地址,而不必修改服务器证书。有什么办法吗?
答案1
不幸的是,除了获得新的证书包含例如您的 TLS 客户端将通过其联系该服务器的其他 DNS 名称/IP 地址的主题备用名称 (SAN) 扩展。
原因是这种“混叠”需要值得信赖通过 X509 验证过程,并且唯一可以实现信息可信绑定(包括“此主题/证书也与 DNS 名称site.example.com
和 IP 地址 1.2.3.4 相关联”之类的别名)的就是拥有这些别名/关联证书本身包含。验证过程信任签名证书,因此颁发证书的签名需要包含一切关于该主题的信息,包括别名。颁发证书声称有效的所有内容都包含在证书本身中。
另一种思考方式是“如果它没有由颁发证书签名,那么它就不可信”。