自签SSL证书实现笔记
应用使用TLS加密传输已是目前IT行业心照不宣的标准了,然而我们通常使用的证书都是通过商用CA机构签名的。有没有一种不花钱的方式呢?比如,我们应用仅针对于内网。答案那是当然,穷人自有穷人家的玩法。
安装cffssl 工具
第1步 下载工具
curl -s -L -o /usr/local/bin/cfssl https://dl.vqiu.cn/package/tarball/cfssl/cfssl_linux-amd64
curl -s -L -o /usr/local/bin/cfssljson https://dl.vqiu.cn/package/tarball/cfssl/cfssljson
第2步 添加执行权限
chmod +x /usr/local/bin/{cfssl,cfssljson}
创建CA 公钥和私钥
第1步: 创建目录
mkdir cfssl
cd cfssl
第2步: 创建ca-csr.json
文件,填入CA相关信息
cat > ca-csr.json <<EOF
{
"CN": "Gitee CA",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "Guangdong",
"L": "Guangzhou",
"O": "vqiu co.,Ltd",
"OU": "IT Department"
}
]
}
EOF
可以使用以下命令来来查询
cfssl print-defaults config
cfssl print-defaults csr
第3步: 基于ca-csr.json
文件来创建CA公钥与私钥。
cfssl gencert -initca ca-csr.json | cfssljson -bare ca –
第4步: 创建包含签名和配置文件详细信息的ca-config.json
。这将用于创建可用于设置基于SSL/TSL的身份验证的服务器或客户端证书。
cat > ca-config.json <<EOF
{
"signing": {
"default": {
"expiry": "8760h"
},
"profiles": {
"web-servers": {
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
],
"expiry": "8760h"
}
}
}
}
EOF
注意: 时限为1年
创建 SSL/TLS 证书
如创建1个域名为good.vqiu.cn
的SSL/TLS证书。
第1步: 创建 server-csr.json
cat > server-csr.json <<EOF
{
"CN": "good.vqiu.cn",
"hosts": [
"*.vqiu.cn"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "Guangdong"
"L": "Guangzhou",
"O": "Vqiu co.,Ltd"
}
]
}
EOF
**第2步:**使用ca创建 SSL/TLS证书
cfssl gencert \
-ca=ca.pem \
-ca-key=ca-key.pem \
-config=ca-config.json \
-profile=web-servers \
server-csr.json | cfssljson -bare server
CA证书并入到操作系统
RHEL/CentOS
# echo "Vqiu self-sign CA" >>tls-ca-bundle.pem
# cat ca.pem >> /etc/pki/tls/certs/ca-bundle.crt
Debian/Ubuntu
为了条目清晰--后续可以轻松地跟踪,创建一个对应的CA子目录
# mkdir /usr/local/share/ca-certificates/vqiu-CA
将证书复制对CA子目录
# cp ca.pem /usr/local/share/ca-certificates/vqiu-CA/ca.crt
执行update-ca-certificates
,将看到以下输出
# sudo update-ca-certificates --fresh
Updating certificates in /etc/ssl/certs...
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
若需要删除添加的CA证书,删除你自定义的根 CA 证书文件后,执行如下命令:
sudo update-ca-certificates --fresh
Alpine
Dockerfile
写法
FROM alpine:latest
RUN apk update && apk add ca-certificates && rm -rf /var/cache/apk/*
COPY ./ca.pem /usr/local/share/ca-certificates/gitee-CA.crt
RUN update-ca-certificates --fresh
常用测试命令
查看证书逾期
openssl x509 -in xx.crt -noout -dates
查看证书的对应的DNS
cat server.pem | openssl x509 -text | grep DNS
查看证书信息
openssl x509 -text -in server.pem -noout
使用openssl 查看证书链信息
openssl s_client -connect xxx:443 |tee logfile
使用curl(带CA证书) 测试
curl --cacert ca.pem --resolv 鉴发的证书域名:443:解析的IP https://鉴发的证书域名