我需要连接到某些https://website.com
。因此,该网站可通过VPN获得。我已连接到VPN,我可以在浏览器中打开该网站。
我已经从浏览器下载了证书:
然后我cat
同时归档到一个certificate.pem
但是当我试图执行命令
时openssl s_client -connect website.com:443 -CAfile /path/to/certificate.pem
当我在终端中执行它时,我有一个错误。
CONNECTED(00000003)
depth=1 /C=US/O=DigiCert Inc/CN=DigiCert SHA2 Secure Server CA
verify error:num=2:unable to get issuer certificate
issuer= /C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert Global Root CA
verify return:0
---
Certificate chain
0 s:/C=AU/ST=Wales/L=Place/O=Company
Ltd/OU=D&D/CN=website.com
i:/C=US/O=DigiCert Inc/CN=DigiCert SHA2 Secure Server CA
---
Server certificate
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
subject=/C=AU/ST=Wales/L=Place/O=Company
Ltd/OU=D&D/CN=website.com
issuer=/C=US/O=DigiCert Inc/CN=DigiCert SHA2 Secure Server CA
---
No client certificate CA names sent
---
SSL handshake has read 2034 bytes and written 328 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES128-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : DHE-RSA-AES128-SHA
Session-ID: 1533BA958D51B9FEAE4C3534F4A417A5896ED17DCAAE83E89E6C2A7F615A583A
Session-ID-ctx:
Master-Key: 5CF D4ACA242B602AAFSDF1234X23E99BD4C62862888947FACFF0E7503BA34C2DD0EC193FA525204A539
Key-Arg : None
Start Time: 1509781851
Timeout : 300 (sec)
Verify return code: 0 (ok)
答案 0 :(得分:3)
openssl
默认情况下仅在证书链以 root 结尾时验证证书链。在信任库中使用服务器即终端实体或叶子证书是没用的,并且不应该需要中间件,因为RFC要求服务器发送它(它们),但是你的服务器显然是有缺陷或配置错误,因为它没有。因此,对于具有中间和root 但不服务器证书的服务器,用于-CAfile
的文件将起作用,假设它们是PEM格式。
或者,最新(和支持)版本1.0.2和1.1.0添加选项-partial_chain
。如果指定,则验证信任库是否具有任何锚点,而不仅仅是根目录。对于您的服务器, 服务器证书或用于-CAfile
的文件中的中间设置就足够了,再次采用PEM格式。
这些案例在用于验证(1)的手册页中进行了描述,该手册页是从s_client(1)的手册页引用的。某些系统可能会生成1ssl或类似的部分,如果您的系统未正确安装或是Windows,则它们是on the web here。
请记住,openssl
历史上并且默认情况下不会检查证书中的服务器名称。 1.1.0有新选项-verify_name
和-verify_hostname
这样做。这些内容在手册页中进行了描述,以便对s_client进行验证和引用。
还要记住,许多服务器虽然显然不属于您,但现在使用服务器名称指示(SNI)扩展来支持具有不同证书的多个“虚拟”主机。 openssl
默认情况下不会发送SNI,但选项-servername
会这样做;这在s_client的手册页中有描述。
通常,查看程序的手册页会告诉您有关程序如何工作以及如何使用它的有用信息,建议使用。 特别是因为这不是编程或开发问题,而且对于StackOverflow来说真的是偏离主题;我会尝试建议迁移到SuperUser或ServerFault,但他们已经有很多欺骗。
答案 1 :(得分:0)
此错误表示openssl正在查找主题为"/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert Global Root CA"
的颁发者证书,但文件/path/to/certificate.pem中未提供该证书。建议运行"openssl x509 -in /path/to/certificate.pem -text"
以查看此文件中证书的主题 - 应与所请求的不同。