openssl verify和s_client命令之间的差异

Ubuntu 14.04上运行OpenSSL 1.0.1l:

openssl s_client -CApath /etc/ssl/certs -showcerts -connect www.google.com:443 

返回:

 Verify return code: 0 (ok) 

但是,运行:

 openssl verify -CApath /etc/ssl/certs/ google_chain.pem 

其中google_chain.pem是上面的s_client命令的输出,返回:

 google_chain.pem: C = US, ST = California, L = Mountain View, O = Google Inc, CN = google.com error 20 at 0 depth lookup:unable to get local issuer certificate 

有人可以解释这种差异吗? 在我看来,openssl verify命令只是忽略-CApath参数。

openssl verify不期望证书包含其链。 链需要通过 – -untrusted参数传递。 您可以在那里传递相同的文件,信任仍然通过在-CAfile/-CApath查找受信任的根来确定。

 openssl verify -CApath /etc/ssl/certs -untrusted google_chain.pem google_chain.pem