这是一个获取ssl证书过期时间的脚本,内容如下
#-*- coding:utf8 -*-
from OpenSSL import crypto
#这个不导入就会报错,取消注释就会正常运行
# from urllib3.contrib import pyopenssl
import urllib3
url="www.baidu.cn"
content=urllib3.contrib.pyopenssl.ssl.get_server_certificate((url,443))
cert = crypto.load_certificate(crypto.FILETYPE_PEM, content)
# 截止日期
print cert.get_notAfter()
# 颁发日期
print cert.get_notBefore()
subject = cert.get_subject()
# 得到证书的域名
issued_to = subject.CN
issuer = cert.get_issuer()
# 得到证书颁发机构
issued_by = issuer.CN
print issued_by
print issued_to
print issuer
错误如下
content=urllib3.contrib.pyopenssl.ssl.get_server_certificate((url,443))
AttributeError: 'module' object has no attribute 'contrib'
不知道为什么
模块对象没有属性,要不换一个函数,或者网上查看一下吧
1:查看模块的__init__.py文件是否有这个变量。
2:查看模块有没有子目录叫做contrib。
3:可以通过输出 vars(urllib3) 或者是 dir(urllib3)进行查看。
在pyopenssl.py里面找到如下的话,应该就是 urllib3 想要 ssl访问 域名,还必须按照如下的方式导入pyopenssl
To activate certificate checking, call
:func:`~urllib3.contrib.pyopenssl.inject_into_urllib3` from your Python code
before you begin making HTTP requests. This can be done in a ``sitecustomize``
module, or at any other time before your application begins using ``urllib3``,
like this::
try:
import urllib3.contrib.pyopenssl
urllib3.contrib.pyopenssl.inject_into_urllib3()
except ImportError:
pass
Now you can use :mod:`urllib3` as you normally would, and it will support SNI
when the required modules are installed.
import urllib3 as urllib3