Tag: ssl

cnnic 证书更新问题

最近为部门内部系统的https 快要过期的证书更新,出现了一系列的问题,很是郁闷!!一个字:恨!!

原来从2010 年 3 月后,由cnnic 签发的证书,有所改变了。2010 年 3 月前,root CA 是 entrust ,中级CA 是cnnic 。3 月后,root 和中级CA ,都是cnnic 了。。。

cnnic 证书本身就没有多少诚信可言了,还做了root CA 。。。

举例说明:

$curl -I https://blog.helosa.org/ 的时候,会有这类报错

curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
More details here: http://curl.haxx.se/docs/sslcerts.html
curl performs SSL certificate verification by default, using a “bundle”
of Certificate Authority (CA) public keys (CA certs). If the default
bundle file isn’t adequate, you can specify an alternate file
using the –cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
the bundle, the certificate verification probably failed due to a
problem with the certificate (it might be expired, or the name might
not match the domain name in the URL).
If you’d like to turn off curl’s verification of the certificate, use
the -k (or –insecure) option.

提示是说,加一个-k 的参数,就不会去验证证书了,但我想了解一下原因。它也给了提示,让我们去这个网页http://curl.haxx.se/docs/sslcerts.html 里了解详情。

通读了一次,大概了解了,因为root 和中级CA 都是cnnic ,并且根CA 的证书并不在curl 的信任列表里,curl 认为它是self-signed 证书,不安全,于是就报错了。

解决方案嘛,把cnnic 的root 证书wget 回来,在这里:http://www.cnnic.cn/uploadfiles/cer/2010/3/2/113823.cer

然后curl 时加上这个证书,curl –cacert 113823.cer https://blog.helosa.org/

=====================================================

在这个问题上,我有两个不明白的地方:

1,其实,可以将cnnic 的root 证书加入到信任列表的,信任列表在/etc/ssl/certs/ 里,通过 curl -vv 可以看到

CAfile: none

CApath: /etc/ssl/certs

/etc/ssl/certs/ 里的文件,其实都是软链,软链到firefox 的证书目录吧,这个 /usr/share/ca-certificates/mozilla/ 。

既然如此,那我把cnnic root 的证书扔进去,总可以了吧?结果发现,还是不行的,难道是名字也有要求?格式不对?

2,朋友用mba 的curl 帮我测试,是正常的,是因为cnnic 的root 证书在信任列表吗?日后入手了mbp 再测试!