ssl新闻资讯

文档中心

Python濡備綍杞绘澗鎼炲畾HTTPS璇佷功锛熺綉缁滃畨鍏ㄨ€侀笩鐨勫疄鎴樻寚鍗?txt

时间 : 2025-09-27 16:30:25浏览量 : 2

2Python濡備綍杞绘澗鎼炲畾HTTPS璇佷功锛熺綉缁滃畨鍏ㄨ€侀笩鐨勫疄鎴樻寚鍗?txt

****

大家好,我是老王,一个干了10年网络安全的"老司机"。今天咱们聊点既实用又有趣的话题——用Python玩转HTTPS证书。别被专业名词吓到,我会用"说人话"的方式,带你从零开始理解这个技术。(文末有可直接复用的代码片段!)

一、HTTPS证书到底是什么?先讲个故事

想象你要给隔壁村的二狗寄封信。如果直接用明信片(HTTP),全村人都能看见内容;但如果用带锁的铁盒(HTTPS),只有二狗有钥匙能打开。HTTPS证书就是这个"铁盒的合格证明",它确保:

1. 网站身份真实(不是骗子伪装的)

2.传输内容加密(即使被截获也看不懂)

举个实际案例:2025年某电商平台因证书配置错误,导致用户支付页面被中间人攻击,直接损失超500万。

二、Python处理证书的三大实战场景

场景1:快速验证网站证书有效性

```python

import ssl

import socket

def check_cert(hostname):

context = ssl.create_default_context()

with socket.create_connection((hostname, 443)) as sock:

with context.wrap_socket(sock, server_hostname=hostname) as ssock:

cert = ssock.getpeercert()

print(f"证书有效期至: {cert['notAfter']}")

示例:检查百度证书

check_cert("www.baidu.com")

```

输出结果会显示类似:

证书有效期至: Oct 12 23:59:59 2025 GMT

场景2:自动化监控证书到期(运维必备)

from datetime import datetime

import OpenSSL

def get_expiry_date(host, port=443):

cert = ssl.get_server_certificate((host, port))

x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, cert)

return datetime.strptime(x509.get_notAfter().decode(), '%Y%m%d%H%M%SZ')

批量检查示例

sites = ["github.com", "twitter.com", "yourdomain.com"]

for site in sites:

days_left = (get_expiry_date(site) - datetime.now()).days

print(f"{site} 还有{days_left}天过期")

场景3:爬虫突破证书验证限制(谨慎使用!)

当遇到自签名证书时:

import requests

??危险操作(仅测试环境使用)

response = requests.get("https://内部测试网站.com", verify=False)

print(response.text)

更安全的替代方案:

response = requests.get("https://内部测试网站.com",

verify="/path/to/company_ca.pem")

三、开发中常见的坑与解决方案

坑1:SSLHandshakeError错误

典型报错:

ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED]

解决方案三步走:

1. 更新certifi包:`pip install --upgrade certifi`

2. 指定证书路径:

```python

import certifi

requests.get(url, verify=certifi.where())

```

3. 对于企业内网,可能需要导入内部CA证书

坑2:自签名证书处理

正确姿势是创建自定义上下文:

context = ssl._create_unverified_context()

?不推荐

?推荐做法(允许特定指纹的证书)

fingerprint = "A1:B2:C3..."

def verify_fingerprint(cert):

return cert.fingerprint(sha256) == bytes.fromhex(fingerprint.replace(":", ""))

四、进阶技巧:用Python生成自签名证书

需要安装`pyopenssl`:

```bash

pip install pyopenssl cryptography

生成代码示例:

from OpenSSL import crypto

生成密钥对

key = crypto.PKey()

key.generate_key(crypto.TYPE_RSA, 2048)

创建X509证书

cert = crypto.X509()

cert.get_subject().CN = "yourdomain.local"

cert.set_serial_number(1000)

cert.gmtime_adj_notBefore(0)

cert.gmtime_adj_notAfter(365*24*60*60)

1年有效期

??生产环境必须设置正确的subjectAltName!

关键知识点

| Python模块 | HTTPS相关功能 |

||--|

| ssl | Python标准库的基础SSL支持 |

| requests | HTTP请求时的证书验证处理 |

| pyOpenSSL | CA/客户端双向认证等高级功能 |

| cryptography | RSA/ECC密钥生成与管理 |

最后提醒大家:2025年起所有主流浏览器已强制要求SAN(Subject Alternative Name)扩展字段,没有SAN的证书会被标记为不安全。如果你在开发中遇到奇怪的问题,很可能就是这个问题导致的!

需要完整代码模板的朋友可以评论区留言,我会发你GitHub仓库地址。觉得有用的话别忘了点赞收藏~

TAG:https证书 python,https证书免费申请,https证书查询入口,https证书价格,https证书下载