证书详解及使用openssl生成自签证书与SAN多域名证书

证书

名词解释:

  • PKI:公钥基础设施
  • CA:证书颁发机构
  • CRL:证书吊销列表
  • OCSP:在线证书状态协议
  • CSR:证书签名申请

证书生命周期:
证书详解及使用openssl生成自签证书与SAN多域名证书_第1张图片

证书类型

  • DV:域名验证,可信度最低,个人和初创公司使用,但美团居然也用
  • OV:组织验证,可信度较高,证书中有企业的名称,BAT均使用该种类型的证书
  • EV:扩展验证,可信度最高,浏览器地址栏会显示企业名称,globalsign,digicert等证书提供商使用该种类型的证书

2017年各大平台取消WoSign、StartCom颁发的证书,原因是颁发的证书混乱,母公司为奇虎360。同年Symantec证书也因为取消信任而卖给了digicert。

选择CA须谨慎,QQ、12306使用的是digicert,百度、阿里云使用的是globalsign。这两个CA因为在阿里云部署有服务器,查询OCSP较快,其他的较慢,免费的Let`s Encrypt,因为国内无法查询OCSP,在iOS上慢并且经常报错。同样支持acme的欧洲CA机构buypass的OCSP是可以访问的,而且是半年有效期。

openssl命令

# 散列值:
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"

openssl生成证书

非SAN版

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改为*,可以通配任何域名

SAN证书

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中添加

CA及CA颁发证书

系统默认的配置文件在/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

cfssl生成证书

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

你可能感兴趣的:(Linux,openssl)