Python 2.7.9现在对SSL证书验证的要求更为严格。真棒!Python Urllib2 SSL错误
我并不感到惊讶的是,之前工作的程序现在正在获取CERTIFICATE_VERIFY_FAILED错误。但我似乎无法让他们工作(不完全禁用证书验证)。
一个程序使用urllib2通过https连接到Amazon S3。
我下载根CA证书到一个名为“verisign.pem”文件,试试这个:
import urllib2, ssl
context = ssl.create_default_context()
context.load_verify_locations(cafile = "./verisign.pem")
print context.get_ca_certs()
urllib2.urlopen("https://bucket.s3.amazonaws.com/", context=context)
,我仍然得到CERTIFICATE_VERIFY_FAILED错误,即使根CA在4号线正确地打印出来。
openssl可以很好地连接到这台服务器。事实上,这里是我用来获取CA证书的命令:
openssl s_client -showcerts -connect bucket.s3.amazonaws.com:443 < /dev/null
我把最后的证书链,并把它放在一个PEM文件,OpenSSL的读取罚款。这是一个与Verisign证书:
Serial number: 35:97:31:87:f3:87:3a:07:32:7e:ce:58:0c:9b:7e:da
Subject key identifier: 7F:D3:65:A7:C2:DD:EC:BB:F0:30:09:F3:43:39:FA:02:AF:33:31:33
SHA1 fingerprint: F4:A8:0A:0C:D1:E6:CF:19:0B:8C:BC:6F:BC:99:17:11:D4:82:C9:D0
任何想法如何让这与启用验证工作?
哪个证书在verisign.pem中?确保它是一个带有A1:DB:63:93:91:6F:17:E4:18:55:09:40:04:15:C7:02:40:B0:AE:6B的SHA1指纹的证书'(Class 3 Public Primary Certification Authority)而不是'4E:B6:D5:78:49:9B:1C:CF:5F:58:1E:AD:56:BE:3D:9B:67:44' :A5:E5'(VeriSign Class 3公共主要认证机构 - G5) –
我终于找到了一个,它的工作原理,谢谢! 你怎么知道哪个根证书被使用?我正在使用openssl x509命令转储链中的每个证书。他们中的大多数人说他们签了哪个证书,但是我没有看到最后一个证书在哪里说明签名的是哪个根证书。 – abjennings