证书技术
使用openssl创建自签名证书
创建CA
1 | openssl genrsa -out root.key 4096 |
创建私钥和公钥文件
1 | # 用来产生私钥文件server.key |
创建签名请求
1 | openssl req -new -key server.key -out server.csr |
创建自签名证书
新建自签名证书的附加信息server.ext,内容如下
1 | authorityKeyIdentifier=keyid,issuer |
使用ca签发ssl证书,此时会产生server.crt文件,即为证书文件
1 | openssl x509 -req -in server.csr -out server.crt -days 3650 \ |
查看证书文件内容
1 | openssl x509 -in server.crt -noout -text |
使用ca校验证书是否通过
1 | openssl verify -CAfile root.crt server.crt |
使用cfssl签发证书
cfssl是CloudFlare开源的一款tls工具,使用go语言编写,地址:https://github.com/cloudflare/cfssl。
安装
mac用户:brew install cfssl
linux用户可以直接下载二进制文件:https://github.com/cloudflare/cfssl/releases
签发证书
待补充
证书格式
证书按照格式可以分为二进制和文本文件两种格式。
二进制格式分为:
- .der或者.cer:用来存放证书信息,不包含私钥。
文本格式分为:
- .pem:存放证书或者私钥。一般是.key文件存放私钥信息。对于pem或者key文件,如果存在——BEGIN CERTIFICATE——,则说明这是一个证书文件。如果存在—–BEGIN RSA PRIVATE KEY—–,则说明这是一个私钥文件。
- *.key:用来存放私钥文件。
- *.crt:证书请求文件,格式的开头为:—–BEGIN CERTIFICATE REQUEST—–
证书格式的转换
将cert证书转换为pem格式
1 | openssl rsa -in server.key -text > server-key.pem |
将pem格式转换为cert格式
证书查看
查看特定域名的证书内容:echo | openssl s_client -connect www.baidu.com:443 -servername www.baidu.com 2>/dev/null | openssl x509 -noout -text
获取特定域名的证书内容:openssl s_client -servername www.baidu.com -connect www.baidu.com:443 </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
在 k8s 中,证书通常存放在 secret 中,可以使用 kubeclt + openssl 命令查看证书内容:kubectl get secret -n test-cluster sharer -o jsonpath='{.data.tls\.crt}' | base64 --decode | openssl x509 -text -noout
证书的使用
curl命令关于证书的用法:
- –cacert:指定ca来校验server端的证书合法性
- –cert:指定客户端的证书文件,用在双向认证mTLS中
- –key:私钥文件名,用在双向认证mTLS中