我不确定如何准确地说出来,但我有一个脚本从Web服务器下载SSL证书以检查它的到期日期。
为此,我需要下载CA证书。目前我将它们写入/ tmp目录中的临时文件并稍后再读回来,但我确信必须有一种方法可以在不写入磁盘的情况下执行此操作。
以下是下载证书的部分
CA_FILE = '/tmp/ca_certs.txt'
root_cert = urllib.urlopen('https://www.cacert.org/certs/root.txt')
class3_cert = urllib.urlopen('https://www.cacert.org/certs/class3.txt')
temp_file = open(CA_FILE, 'w')
temp_file.write(root_cert.read())
temp_file.write(class3_cert.read())
temp_file.close()
修改
以下是使用该文件获取证书的部分
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ssl_sock = ssl.wrap_socket(s, ca_certs=CA_FILE, cert_reqs=ssl.CERT_REQUIRED)
ssl_sock.connect(('mail.google.com', 443))
date = ssl_sock.getpeercert()['notAfter']
答案 0 :(得分:4)
urllib
的响应是文件对象。只需使用那些使用实际文件的地方。这假设消耗文件对象的代码当然不需要写入它们。
答案 1 :(得分:4)
缓存他们的根证书,或者更好的是,将其与您系统上的其他根证书一起安装。
答案 2 :(得分:1)
在以下行中:
temp_file.write(root_cert.read())
您实际上是在将证书读入内存并再次将其写出来。该行相当于:
filedata = root_cert.read()
temp_file.write(filedata)
现在filedata
是一个包含根证书字节的变量,您可以以任何您喜欢的方式使用它(包括不将其写入temp_file
并使用它做其他事情。)< / p>