【发布时间】:2014-06-18 10:19:29
【问题描述】:
我正在构建一个库来讨论第三方的 Web 服务,我们直接在 IP 上连接到该服务。该服务受 SSL 保护,我们提供客户证书来识别我们。他们提供的证书是自签名的,我有 CA 公钥,这很好,但他们证书的 CN 是电子邮件地址,因此不被视为有效。
是否只验证证书是由 CA 签署的?如果这有帮助,我正在使用 Ruby,尽管我猜它更像是一个 OpenSSL 的东西。另一种方法是不验证他们的证书,但我显然不想那样做。
(如果您想知道,要求他们更改证书或添加主机名不是一种选择。这是企业:D)
【问题讨论】:
-
"...但他们证书的 CN 是一个电子邮件地址,因此它不被视为有效" - 使用主题备用名称 (SAN),而不是通用名称 (CN)。 IETF 和 CA/B 均不赞成将 DNS 名称放入 CN。所以听起来他们在做正确的事情如果 DNS 名称在 SAN 中。
-
"...如果有帮助,我正在使用 Ruby,..." - Ruby 是一种劣势。当谈到 SSL/TLS 和 PKI 的优点时,它有点蹩脚。它没有暴露足够多的来自 OpenSSL 的东西。
-
您能提供证书详细信息吗?您可以使用
openssl x509 -in <cert> -inform PEM -text -noout。将输出粘贴到问题中。
标签: ruby ssl openssl self-signed ca