我不明白 openssl 的输出。运行 openssl 如下:
#openssl s_client -connect google.com:443 -CAfile cacert.pem < /dev/null
最终一切都很好,因为最终实体的证书已经验证成功:
Verify return code: 0 (ok)
return:1
但是下面中间体输出开头的验证怎么办?这是什么意思或者有什么意义?
深度=3 C = US,O = Equifax,OU = Equifax 安全证书颁发机构验证返回:1 深度=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA 验证返回:1 深度=1 C = US, O = Google Inc, CN = Google Internet Authority G2 验证返回:1 深度=0 C = 美国,ST = 加利福尼亚,L = 山景城,O = Google Inc,CN = google.com 验证返回:1 --- 证书链 0 s:/C=US/ST=加利福尼亚/L=山景城/O=Google Inc/CN=google.com i:/C=US/O=Google Inc/CN=Google 互联网管理局 G2 1 s:/C=US/O=Google Inc/CN=Google 互联网管理局 G2 i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA 2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA i:/C=US/O=Equifax/OU=Equifax 安全证书颁发机构 ---
答案1
SSL 向验证回调函数(用于对证书是否适用于特定用途进行最终验证)传递一个字段,该preverify_okay
字段称为 ,用于指示证书链是否通过了适用于所有情况的基本检查。A1
表示这些检查已通过。
int verify_callback(int preverify_ok, X509_STORE_CTX *x509_ctx)
verify_callback 函数用于控制设置 SSL_VERIFY_PEER 标志时的行为。它必须由应用程序提供并接收两个参数:preverify_ok 表示相关证书的验证是否通过(preverify_ok=1)或未通过(preverify_ok=0)。
这就是所verify return:1
展示的内容。
如果您需要更多详细信息,可以查看代码:
int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx)
{
[ snip ]
BIO_printf(bio_err,"verify return:%d\n",ok);
return(ok);
}