CA
SSL: secure sockets layer
TLS: transport layer security
CA: Certificate Authority.
SNI: server name indication
证书类型
- x509: 只有公钥没有私钥匙
编码方式
- pem: base64编码
- der: 二进制
证书文件:
- crt: 证书文件(可以是pem或der编码)
- cer: 证书文件(可以是pem或der编码)
- csr: 申请签名的文件
- key: 私钥文件
创建自签名证书
创建x509证书:
$ openssl genrsa -out server.key 2048 // 创建key
$ openssl req -new -key server.key -sha256 -out server.csr // 创建csr
$ openssl x509 -req -days 365 -in server.csr -signkey server.key -sha256 -out server.crt // 创建证书
查看证书信息:
// pem编码
$ openssl x509 -in cert.pem -noout -text
// der编码
$ openssl x509 -in cert.der -inform der -noout -text
查看证书有效期:
$ openssl x509 -in ca.domain.com.crt -noout -dates
客户端
客户端需要信任证书.
Linux:
// 添加
$ cp my-cert.crt /usr/local/share/ca-certificates/my-cert.crt
$ sudo update-ca-certificates
// 删除
$ rm /usr/local/share/ca-certificates/my-cert.crt
$ sudo update-ca-certificates --fresh
windows:
// 添加
certutil -addstore -f "ROOT" my-cert.crt
// 删除
certutil -delstore "ROOT" my-cert.crt
证书验证
系统默认的根证书在
/etc/ssl/certs.
python的requests包默认使用根证书在
/usr/local/lib/python3.6/site-packages/requests/cacert.pem
requests也通过certifi来管理根证书
/usr/local/lib/python3.6/site-packages/certifi/cacert.pem
可以通过设置REQUESTS_CA_BUNDLE环境变量来让requests使用系统的根证书。