涛子 - 简单就是美

成单纯魁增,永继振国兴,克复宗清政,广开家必升

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
* https://docs.azure.cn/zh-cn/articles/azure-operations-guide/application-gateway/aog-application-gateway-howto-create-self-signed-cert-via-openssl
* http://i.lckiss.com/?p=7479

* x509证书链

x509证书一般会用到三类文件,key,csr,crt。
Key是私用密钥,openssl格式,通常是rsa算法。
csr是证书请求文件,用于申请证书。在制作csr文件的时候,必须使用自己的私钥来签署申请,还可以设定一个密钥。
crt是CA认证后的证书文件(windows下面的csr,其实是crt),签署人用自己的key给你签署的凭证。

首先要有一个CA根证书,然后用CA根证书来签发用户证书。
用户进行证书申请:一般先生成一个私钥,然后用私钥生成证书请求(证书请求里应含有公钥信息),再利用证书服务器的CA根证书来签发证书。
1. 自签名证书(一般用于顶级证书、根证书): 证书的名称和认证机构的名称相同.
2. 根证书:根证书是CA认证中心给自己颁发的证书,是信任链的起始点。任何安装CA根证书的服务器都意味着对这个CA认证中心是信任的。

内部测试可以使用自签名证书

* 文件类型

.key格式:私有的密钥
.csr格式:证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写
.crt格式:证书文件,certificate的缩写
.crl格式:证书吊销列表,Certificate Revocation List的缩写
.pem格式:用于导出,导入证书时候的证书的格式,有证书开头,结尾的格式

1. 生成自签名证书

export SUBJ="/C=CN/ST=Beijing/L=Beijing/O=example Co. Ltd./OU=example Dept./CN=example.com/emailAddress=admin@example.com"
export HOST1="*.example.com"
export HOST2="*.bj.example.com"
export HOST3="127.0.0.1"
export HOST4="192.168.10.32"

# 服务器私钥
openssl genrsa -out domain.key 4096

# 服务器签名请求
openssl req -new -sha256 -key domain.key -subj "$SUBJ" -reqexts SAN \
    -config <(cat /etc/pki/tls/openssl.cnf <(printf "\n[SAN]\nsubjectAltName=DNS:$HOST1,DNS:$HOST2,IP:$HOST3,IP:$HOST4")) \
    -out domain.csr

*** 报错: cat: /etc/ssl/openssl.cnf: No such file or directory ***
find / . -name openssl.cnf,找到文件的正确路径,替换命令行cat后面的内容

# 服务器签发证书
openssl x509 -req -days 3650 -in domain.csr -signkey domain.key -out domain.crt -extensions SAN \
    -extfile <(cat /etc/pki/tls/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:$HOST1,DNS:$HOST2,IP:$HOST3,IP:$HOST4"))

# 查看证书
openssl x509 -noout -text -in domain.crt

2. 自签 CA 证书

export SUBJ="/C=CN/ST=Beijing/L=Beijing/O=example Co. Ltd./OU=example Dept./CN=example.com/emailAddress=admin@example.com"
export HOST1="*.example.com"
export HOST2="*.bj.example.com"
export HOST3="127.0.0.1"
export HOST4="192.168.10.32"

# CA根私钥
openssl genrsa -aes256 -out ca.key 4096
提示输入密码,后面签发证书时需要使用

# CA根证书
openssl req -new -x509 -days 3650 -key ca.key -sha256 -subj "$SUBJ" -out ca.crt

# 服务器私钥
openssl genrsa -out domain.key 4096

# 服务器签名请求
openssl req -new -sha256 -key domain.key -subj "$SUBJ" -reqexts SAN \
    -config <(cat /etc/pki/tls/openssl.cnf <(printf "\n[SAN]\nsubjectAltName=DNS:$HOST1,DNS:$HOST2,IP:$HOST3,IP:$HOST4")) \
    -out domain.csr

# 服务器签发证书
openssl x509 -req -days 3650 -in domain.csr -out domain.crt \
    -CA ca.crt -CAkey ca.key -CAcreateserial -extensions SAN \
    -extfile <(cat /etc/pki/tls/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:$HOST1,DNS:$HOST2,IP:$HOST3,IP:$HOST4"))

查看证书
openssl x509 -noout -text -in ca.crt
openssl x509 -noout -text -in domain.crt

3. 开源证书管理工具 cfssl

https://zhuanlan.zhihu.com/p/596891203
posted on 2016-09-07 10:15  北京涛子  阅读(342)  评论(0编辑  收藏  举报