加密算法
大约 2 分钟
加密算法
使用 openssl 生成自签名证书
生成自签名 CA 根证书
# 生成 rsa 私钥 openssl genrsa -des3 -out ca.key 2048 # 用私钥生成公钥证书(PS:时间不要超过13 个月[397 天]) openssl req -x509 -key ca.key -out ca.crt -days 365 # 可以读一下证书的内容看看 openssl x509 -in ca.crt -text -noout
生成私钥与证书与签名请求并通过刚才生成的 CA 根证书签名
# 生成 rsa 私钥 openssl genrsa -out summer-py-server.key 2048 # 用私钥生成证书签名请求 openssl req -new -key summer-py-server.key -out summer-py-server.csr
目前的浏览器校验证书都需要一个额外的校验证书备用名称的字段需要额外配置, 新建一个
.ext
文件basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = serverAuth, clientAuth subjectAltName = @alt_names [alt_names] DNS.1 = ayusummer.com DNS.2 = summer.com IP.1 = 172.29.64.1 IP.3 = 127.0.0.1
正确使用 OpenSSL 自签发代码|邮件|域名|IP 证书(附免费可信任 IP 证书申请) - VirCloud's Blog - Learning&Sharing
# 用 CA 根证书签名 openssl x509 -req -in summer-py-server.csr -CA ../ca/ca.crt -CAkey ../ca/ca.key -extfile ext.ext -set_serial 01 -out summer-py-server.crt -days 365
python 起个 https server 试试
import http.server import ssl server_address = ("0.0.0.0", 443) httpd = http.server.HTTPServer(server_address, http.server.SimpleHTTPRequestHandler) httpd.socket = ssl.wrap_socket( httpd.socket, server_side=True, certfile="key/py_server/summer-py-server.crt", keyfile="key/py_server/summer-py-server.key", ssl_version=ssl.PROTOCOL_TLS, ) httpd.serve_forever()
安装根证书:
然后在双击这个证书可以看到已经能识别了
也可以从命令行使用
certlm.msc
调起证书管理器进行查看只需要加这个根证书就行了, 后续通过根证书申请的证书就无需添加了
此时再访问站点就没有不安全提示了
相应的 PowerShell 中
Invoke-WebRequest
也可以正常使用了