ZetCode

Python 实现 SSL/TLS 证书

最后修改于 2024 年 1 月 29 日

在本文中,我们将介绍如何在 Python 中实现 SSL/TLS 证书。SSL 证书是一种数字证书,用于证明网站的身份并启用加密连接。

简介

我们的生活如今已与互联的数字世界紧密交织,在线互动已无缝融入我们的日常生活。这种高度的互联性使网络安全成为我们关注的焦点。在这些互动中,每一次点击、轻触或交易都会不经意间留下易受恶意利用的机密数据痕迹。这时,SSL 证书就派上用场了。

SSL 定义

SSL(安全套接层)及其演进版 TLS(传输层安全性)是精确设计的加密协议。它们的主要目的是在 Web 服务器和用户浏览器之间建立安全连接。这些协议保护我们免受数据泄露、网络钓鱼和未经授权访问等网络威胁。

在下一节中,我们将介绍在 Python 中集成 SSL 证书的过程。如今,精通 TLS/SSL 证书对于开发人员、安全爱好者或任何试图提高自身安全性的人来说都是一项基本技能。

获取 SSL 证书

加强我们网站安全的第一步是获取 SSL 证书。为此,我们需要向信誉良好的证书颁发机构 (CA) 提交证书签名请求 (CSR)。CSR 包含组织和服务器的详细信息,在 CA 颁发证书之前会经过 CA 的严格审查。

出于开发目的,我们可以创建自签名证书。对于生产环境,重要的是仅从值得信赖的 SSL 提供商处购买 SSL 证书

下一步是在我们的 Web 服务器上安装它。安装过程会在我们的用户和服务器之间创建安全的链接,在浏览器地址栏中显示的令人放心的挂锁图标即是证明。安装过程可能因我们服务器的独特配置而异。

SSL 类型

以下列表描述了各种 SSL 证书类型

我们根据我们的需求和预算选择合适的证书。

生成 CA 签名的 SSL 证书

生成 CA 签名的 SSL 证书需要以下步骤

选择一个受信任的证书颁发机构 (CA)

第一步是选择一个信誉良好的 CA 来颁发我们的 SSL/TLS 证书。CA 负责在颁发证书之前验证我们的域名和组织详细信息。

生成私钥和 CSR

SSL 证书使用非对称加密,采用一对密钥——一个私钥和一个公钥。要开始此过程,有必要生成证书签名请求 (CSR) 并创建私钥。OpenSSL 可用于此目的。以下是供参考的代码片段

$ openssl req -new -newkey rsa:2048 -nodes -keyout example.com.key -out example.com.csr -subj "/CN=example.com"

该命令为我们的域名生成私钥 (example.com.key) 和 CSR (example.com.csr)。请务必将 example.com 替换为您的域名。

存储 CSR 文件

我们为证书文件创建一个本地目录。该目录应包含 CSR 文件。我们将此 CSR 与我们的私钥一起发送给 CA 进行验证。

Python SSL 证书安装

一旦我们从 CA 获取了 SSL 证书,我们就将其从 certificate.crt 重命名为 certificate.pem。然后,我们使用以下代码在 Python 中创建 SSL 上下文

#!/usr/bin/python

import ssl

context = ssl.create_default_context()

context.load_cert_chain(certfile='/path/to/our/certificate.pem',
    keyfile='/path/to/our/private.key')

验证安装

为了确保证书已正确安装和使用,我们可以使用 Python 的 SSL 模块检查服务器提供的 SSL 证书链

#!/usr/bin/python

import ssl
import socket

hostname = 'example.com'  # Replace with your domain name

context = ssl.create_default_context()

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

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

        chain = ssock.getpeercert(chain=True)
        print(chain)

代码示例通过 443 端口与我们的域建立连接,获取服务器的证书链,然后显示它。它验证了我们 SSL 证书的正确使用。

来源

Python SSL 文档

在本文中,我们介绍了 SSL 证书,并展示了如何在 Python 语言中实现 CA 签名的 SSL 证书。

作者

我叫 Jan Bodnar,我是一名充满激情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在教学编程方面拥有超过十年的经验。

列出所有 Python 教程