创建2个目录,一个ca,一个certs
- ca: 存放ca相关数据
- certs: 存放申请的公私钥和配置
1 创建CA
# 创建ca私钥,需要指定密码
openssl genrsa -aes256 -out ca.key 4096
# 生成证书
openssl req -x509 -new -nodes -key ca.key -sha256 -days 7300 -out ca.crt
# 查看证书
openssl x509 -in ca.crt -noout -text
2.创建域名附加配置文件,新建文件cert.ext 输入如下内容保存
没有这个浏览器不认识,主要是dns这行的附加数据
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names[alt_names]
DNS.1 = ai.etronprobe.com
DNS.2 = etronprobe.com
3 申请和签发证书
cd ..
mkdir certs
cd certs# 生成私钥
openssl genrsa -out ai.key 2048
# 创建申请
openssl req -new -key ai.key -out ai.csr
# 使用CA签署ssl证书
# ssl证书有效期10年
openssl x509 -req -in ai.csr -out ai.crt -days 3650 -CAcreateserial -CA ../ca/ca.crt -CAkey ../ca/ca.key -CAserial serial -extfile cert.ext
4 可选命令
#查看证书
openssl x509 -in ai.crt -noout -text#验证证书是否通过
openssl verify -CAfile ../ca/ca.crt ai.crt#合并公私钥(如果需要,比如iis)
openssl pkcs12 -export -in ai.crt -inkey ai.key -out ai.pfx# 将crt转为p7b
openssl crl2pkcs7 -nocrl -out ca.p7b -certfile ca.crt
5. 注,文件类型:
- crt/cer 是证书/公钥
- csr 申请
- pem/key 私钥
- pfx/p12 公私钥合体
- p7b 证书链,理解为crt的组合
6 问题排查
- firefox 报错,证书导不进去,或者不认根证书. 请使用
#查看证书
openssl x509 -in ca.crt -noout -text
命令查看是否包含这一句,如果不含,则创建的ca证书未被声明为: 基本约束 证书颁发机构 是
则firefox不认ca根证书,所以无效,但是chrome,edge不管这个,都认
X509v3 Basic Constraints: criticalCA:TRUE
应该是由于
# 类似于此语句中
openssl x509 -req -days 3650 -sha256 -extensions v3_ca -signkey private/cakey.pem -in private/ca.csr -out certs/ca.cer
# 这段没生效导致的
-extensions v3_ca
解决方案:用本文的命令来签发就好了
- 使用AD CS ,即windows自带的证书套件
浏览器不认,报错:NET::ERR_CERT_COMMON_NAME_INVALID
是因为证书没有嵌入域名信息,即证书中缺少这个信息
DNS.1 = ai.etronprobe.com
DNS.2 = etronprobe.com
签发时需要加入附加信息