基础概念
- 对称加密: 一个密码加密,同样的密码解密
- 非对称加密:一个密码加密,另一个密码解密(公钥,私钥)
- 素数积求因子
- 公钥加密,私钥解密的情况通常被称为加密解密
- 私钥加密,公钥解密的情况被称为签名和验证签名
注:公钥是给别人用的,别人用来加密。私钥是给自己用的,用来给自己的文件写上签名。
RSA/DSA/SHA/MD5
非对称加密算法
- RSA: RSA可以用与加密解密,也可以签名验签名
- DSA: 只能用于签名
- SHA/MD5: 摘要算法,依据数据内容生成一种固定长度的摘要
注:实际过程中,要传输的数据可能很大,加密比较费时,所以一般把源数据先进行摘要,对摘要进行加密,传输明文和加密之后的摘要。(有疑问)
CA/PEM/DER/X509/PKCS
- 生成公钥和私钥之后,需要传输公钥给别人使用,但是传输过程中可能被恶意破坏。为了解决这个问题需要一个公正方做这个事情,任何人都能找它来确认公钥是谁发的。这就是CA。
- CA:将自己的公钥发给所有人,想要发布公钥的人可以将自己的公钥信息和一些身份信息发给CA,CA用自己的秘钥加密,也称之为签名。然后这个包含了你的公钥和你信息的文件就可以称之为证书文件。CA类似于发驾照的地方,证书类似于驾照.
- 根证书:是CA给自己颁发的证书,是信任连的起点。任何安装CA根证书的服务器都意味着对这个CA认证中心式信任的。
- 数字证书:CA对证书申请者真实身份验证之后,用CA的根证书对申请人
- x509证书链:
- key: 私用秘钥,openssl格式,通常rsa算法
- csr: 证书请求文件,用户申请证书。在制作csr文件的时候,必须使用自己的私钥来签署申请,还可以设定一个秘钥。证书签名请求(certificate signing request)
- crt: 是CA认证后的认证后的证书文件,签署人用自己的key给你签署的凭证
- crl: 证书吊销列表, Certificate Revocation List的缩写
- pem: 用于导入导出证书时候的证书格式,有证书开头,结尾的格式
使用过程
1. CA根证书生成过程
# 生成CA私钥
openssl genrsa -out ca.key 2048
# 生成证书请求文件,作用是什么呢?
openssl req -new -key ca.key -out ca.csr
# 生成CA证书,使用私钥进行签名
openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt
2. 用户证书
- 服务器端证书生成
# 生成私钥
openssl genrsa -des3 -out server.key 1024
# 生成证书请求文件
openssl req -new -key server.key -out server.csr
# 生成证书
openssl ca -in server.csr -out server.crt
- 客户端证书生成
# 生成私钥
openssl genrsa -des3 -out client.key 1024
# 生成证书请求文件
openssl req -new -key client.key -out client.csr
# 生成证书文件
openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key
- 生成pem格式证书
cat client.crt client.key > client.pem
cat server.crt server.key > server.pem
https请求使用证书
基本python程序
- hello world程序
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return "Hello World!"
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=5555)
# 使用证书
#if __name__ == '__main__':
# app.run(debug=True, host='0.0.0.0', port=5555, ssl_context=("server-cert.pem", "server-key.pem"))
参考文章
- https://www.cnblogs.com/Anker/p/6018032.html
- https://blog.youkuaiyun.com/moonhillcity/article/details/52768218
- https://blog.youkuaiyun.com/zzhongcy/article/details/21989227