名词解释:
2017年各大平台取消WoSign、StartCom颁发的证书,原因是颁发的证书混乱,母公司为奇虎360。同年Symantec证书也因为取消信任而卖给了digicert。
选择CA须谨慎,QQ、12306使用的是digicert,百度、阿里云使用的是globalsign。这两个CA因为在阿里云部署有服务器,查询OCSP较快,其他的较慢,免费的Let`s Encrypt,因为国内无法查询OCSP,在iOS上慢并且经常报错。同样支持acme的欧洲CA机构buypass的OCSP是可以访问的,而且是半年有效期。
# 散列值:
echo -n 123456 | md5sum | awk '{print $1}'
openssl dgst -md5 <(echo -n 123456) | awk '{print $2}'
#e10adc3949ba59abbe56e057f20f883e
# 对称加密:
openssl enc -e -aes-128-cbc -a -salt -in fstab -out fstab.bak
openssl enc -d -aes-128-cbc -a -salt -in fstab.bak -out fstab
# 非对称加密:
# 生成私钥
(umask 077;openssl genrsa -out test.key 2048)
# 导出公钥
openssl rsa -in test.key -pubout -out test.pubkey
#导出pfx
openssl pkcs12 -export -inkey server.key -in server.crt -out server.pfx
# 生成各种密码:
openssl passwd -h
# 生成随机数:
openssl rand -hex 10
# ocsp测试:
# openssl ocsp -issuer bundle.crt -cert site.crt -no_nonce -url http://ocsp.ca.com -text -respout stapling_ocsp
#ssl_stapling on;
#ssl_stapling_verify on;
#ssl_stapling_file /home/certs/stapling_ocsp;
# openssl s_client -connect site.com:443 -status –cafile bundle.crt -tlsextdebug < /dev/null 2>&1 | grep -i "OCSP response"
SUBJECT="/C=CN/ST=Shanghai/L=Shanghai/O=itxz/OU=it/CN=xiaoze.com"
openssl req -new -x509 -days 3650 -nodes -out cert.crt -keyout cert.key -subj "$SUBJECT"
chrome从58开始不再信任这种没有SAN的V1证书,CN改为*
,可以通配任何域名
cat > san.conf << EOF
[ req ]
distinguished_name = req_distinguished_name
req_extensions = req_ext
[ req_distinguished_name ]
[ req_ext ]
subjectAltName = @alt_names
[alt_names]
DNS.1 = itxz.com
DNS.2 = *.itxz.com
EOF
SUBJECT="/C=CN/ST=Shanghai/L=Shanghai/O=itxz/OU=it/CN=xiaoze"
openssl req -new -x509 -days 365 -nodes -out cert.crt -keyout cert.key -subj "$SUBJECT" -config san.conf -extensions req_ext
需要更多域名可以在alt_names中添加
系统默认的配置文件在/etc/pki/tls/openssl.cnf
生成CA证书:
cd /etc/pki/CA
(umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
openssl req -new -x509 -key private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365 -subj "/C=CN/ST=Shanghai/L=Shanghai/O=itxz/OU=it/CN=xiaoze.com"
颁发证书:
注意事项:
因为使用默认的配置文件,CA的私钥路径固定为/etc/pki/CA/private/cakey.pem
配置文件里指明了subject的前几项必须相同,CN必须不同
配置文件里basicConstraints=CA:FALSE
,限制生成的为最终证书(end user cert),不能再以此证书为CA签发其他证书
如果要签发SAN证书,需要在配置文件中添加subjectAltName信息
cd /etc/pki/CA
# 存储证书编号
touch index.txt
# 首次必须为奇数
echo 01 >serial
(umask 077;openssl genrsa -out server.key 2048)
openssl req -new -key server.key -out server.csr -days 365 -subj "/C=CN/ST=Shanghai/L=Shanghai/O=itxz/OU=it/CN=www.xiaoze.com"
openssl ca -in server.csr -out server.crt
此外还有吊销证书,签发中间证书,提供OCSP服务等。
现实中,如果有中间证书,需要合并为fullchain.pem
CDN提供商CF提供的工具
mkdir -p ssl/json
cd ssl
cfssl print-defaults config > json/ca-config.json
cfssl print-defaults csr > json/ca-csr.json
# 生成CA证书
cfssl gencert -initca json/ca-csr.json | cfssljson -bare ca
# 生成server证书
cfssl print-defaults csr > json/server.json
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=json/ca-config.json -profile=www json/server.json | cfssljson -bare server
# 生成client证书
cfssl print-defaults csr > json/client.json
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=json/ca-config.json -profile=client json/client.json | cfssljson -bare client