问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何验证在Python SSL证书

发布网友 发布时间:2022-03-03 18:03

我来回答

1个回答

热心网友 时间:2022-03-03 19:32

import os
import glob
from OpenSSL.SSL import Context, TLSv1_METHOD, VERIFY_PEER, VERIFY_FAIL_IF_NO_PEER_CERT, OP_NO_SSLv2
from OpenSSL.crypto import load_certificate, FILETYPE_PEM
from twisted.python.urlpath import URLPath
from twisted.internet.ssl import ContextFactory
from twisted.internet import reactor
from twisted.web.client import getPage
certificateAuthorityMap = {}
for certFileName in glob.glob("/etc/ssl/certs/*.pem"):
    # There might be some dead symlinks in there, so let's make sure it's real.
    if os.path.exists(certFileName):
        data = open(certFileName).read()
        x509 = load_certificate(FILETYPE_PEM, data)
        digest = x509.digest('sha1')
        # Now, de-plicate in case the same cert has multiple names.
        certificateAuthorityMap[digest] = x509
class HTTPSVerifyingContextFactory(ContextFactory):
    def __init__(self, hostname):
        self.hostname = hostname
    isClient = True
    def getContext(self):
        ctx = Context(TLSv1_METHOD)
        store = ctx.get_cert_store()
        for value in certificateAuthorityMap.values():
            store.add_cert(value)
        ctx.set_verify(VERIFY_PEER | VERIFY_FAIL_IF_NO_PEER_CERT, self.verifyHostname)
        ctx.set_options(OP_NO_SSLv2)
        return ctx
    def verifyHostname(self, connection, x509, errno, depth, preverifyOK):
        if preverifyOK:
            if self.hostname != x509.get_subject().commonName:
                return False
        return preverifyOK
def secureGet(url):
    return getPage(url, HTTPSVerifyingContextFactory(URLPath.fromString(url).netloc))
def done(result):
    print 'Done!', len(result)
secureGet("https://google.com/").addCallback(done)
reactor.run()

这个验证要安装 Twisted 库。

当然这样的库好多,如:pycurl,requests,M2Crypto

import requests
requests.get('https://somesite.com', cert='/path/server.crt', verify=True)

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
个人账户养老金预测公式:现有5万元,缴费20年,能领多少钱? 临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 做数据分析行业考什么证书比较有含金量? vivo手机忘了密码如何解锁 开机时显示要激活windows怎么解决? 激活windows系统需怎样操作? 电脑设置以激活windows 是怎么回事 激活windows转到设置以激活windows vivo x9手机变卡顿怎么办 vivo手机卡顿怎么办 如何使用手机开美的空调 怎么用手机app遥控器,开美的空调? 手机玩游戏很卡怎么办,vivo手机 vivoiqoo手机越来越卡该怎么办办? 美的空调如何用美居APP实现智能控制? 使用vivo手机变卡顿怎么办 美的空调怎么用手机开启 怎么用手机遥控美的空调 美的空调怎么远程遥控? 我家的美的空调要在手机上控制怎么设置 美的空调手机怎么控制 美的空调冷静星二代怎样用手机控制? 怎么查询自己实名认证了几个 怎么看自己实名认证了几个 怎么查认证了几个 如何查询自己实名认证了多少个? 怎样能查实名认证了哪几个? 速热热水器怎样自行安装? 搜狗输入法怎么把状态栏放到桌面 如何把搜狗输入法的工具条显示在桌面上 怎样安装即热式热水器 如何让搜狗输入法在我的桌面上显示并能够得到应用? 即热式电热水器安装方法以及注意事项 怎样才能让我的搜狗输入法显示在桌面的任务栏上 速热水器安装方法 怎样让搜狗状态栏一直显示在桌面 速热电热水器怎样安装水管和电 win7系统,怎么把搜狗输入法悬浮在桌面 即热式热水器安装方法,即热式热水器要如何安装 如何让搜狗拼音的桌面的皮肤那个标志一直显示在桌面上? 即热式热水器安装方法 即热式电热水器安装留意事项: 怎么不让搜狗输入法搜狗输入法显示在桌面