证书的生成和验证
1. 安装 OpenSSL
首先,确保您的系统上安装了 OpenSSL。在大多数 Linux 发行版中,您可以使用包管理器来安装它。
例如,在 Ubuntu 上:
sudo apt update
sudo apt install openssl
2. 生成私钥
私钥是安全证书的核心,应该保密。使用以下命令生成私钥:
openssl genpkey -algorithm RSA -out private.key -pkeyopt rsa_keygen_bits:2048
这里,-algorithm RSA 指定了使用 RSA 算法,-out private.key 指定了输出文件名,rsa_keygen_bits:2048 设置了密钥长度。
3. 生成 CSR(证书签名请求)
CSR 是发送给证书颁发机构以获取签名证书的请求。生成 CSR 时,系统会提示您输入一些信息,如国家、州、组织等。
openssl req -new -key private.key -out certificate.csr
4. 生成自签名证书
在测试环境中,您可以使用 OpenSSL 生成自签名证书。以下是命令:
openssl x509 -req -days 365 -in certificate.csr -signkey private.key -out certificate.crt
这里,-days 365 设置了证书的有效期限为一年,-in certificate.csr 指定了 CSR 文件,-signkey private.key 指定了用于签名的私钥,-out certificate.crt 指定了输出证书文件。
5. 查看证书信息
您可以使用以下命令来查看证书的内容:
openssl x509 -in certificate.crt -text -noout
可以看到之前的设置内容:
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=CN, ST=SH, L=Shanghai, O=tianxiaohui.com, CN=10.236.90.154, emailAddress=eric@txh.com
Subject: C=CN, ST=SH, L=Shanghai, O=tianxiaohui.com, CN=10.236.90.154, emailAddress=eric@txh.com
6. 使用证书
生成的 certificate.crt(证书)和 private.key(私钥)可以用于配置 HTTPS 服务器,如 Apache 或 Nginx。
安装证书到 Flask server app
一个基于 Flask 到本地app:
from flask import Flask
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def index():
return 'Hello, World!'
# ... 你的应用代码 ...
if __name__ == '__main__':
# 指定证书和私钥的路径
app.run(host='0.0.0.0', port=443, ssl_context=('certificate.crt', 'private.key'))
本地访问
本地浏览器访问的到下面的错误:Your connection is not private
使用 python requests 访问:
requests.exceptions.SSLError: HTTPSConnectionPool(host='10.236.90.154', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate (_ssl.c:1129)')))