已发表专栏的入口(订阅即可观看所有专栏)
0 grpc-go、protobuf、multus-cni 技术专栏 总入口
4 grpc、oauth2、openssl、双向认证、单向认证等专栏文章目录
创建SAN类型的证书,就是在普通的证书里,添加上Subject Alternative Name属性。
Subject Alternative Name的简写就是SAN
1、创建SAN证书的两种方式 |
- 通过自定义配置文件openssl.cnf
- 通过命令行方式
2、方式一:通过自定义openssl.cnf方式 |
2.1、自定义openssl.cnf |
2.1.1、根据模板openssl.cnf 创建openssl.cnf |
首先,找到openssl软件自带的openssl.cnf的文件路径, (centos系统)
拷贝到指定目录下
cp /etc/pki/tls/openssl.cnf .
2.1.2、开始设置SAN |
打开新创建的openssl.cnf
- 设置copy_extensions
- 设置req_extensions
- 设置subjectAltName
2.2、创建证书签名文件csr |
-
创建一个证书密钥
openssl genrsa -out server.key 2048
-
根据证书密钥创建证书签名
openssl req -new -nodes -key server.key -out server.csr -days 365 -subj "/C=CN/ST=beijing/L=beijing/O=tt/OU=dd/CN=golang-learning" -config ./openssl.cnf -extensions v3_req
openssl req -new -nodes -key server.key -out server.csr -days 365 -subj "/C=CN/ST=beijing/L=beijing/O=tt/OU=dd/CN=golang-learning" -config ./openssl.cnf -extensions v3_req -extendedKeyUsage "serverAuth,clientAuth"
-
查看生成的证书签名CSR, server.csr
openssl req -noout -text -in server.csr
2.3、利用根证书ca.crt,证书签名server.csr,来生成证书 |
2.3.1、先创建一个根证书ca.crt |
openssl req -newkey rsa:2048 -nodes -keyout ca.key -x509 -days 365 -out ca.crt -subj "/C=CN/ST=beijing/L=beijing/O=tt/OU=dd/CN=golang"
2.3.2、利用根证书ca.crt, 证书签名server.csr来创建证书server.crt |
openssl x509 -req -days 365 -in server.csr -out server.crt -CA ca.crt -CAkey ca.key -CAcreateserial -extfile ./openssl.cnf -extensions v3_req
2.4、查看server.crt证书里是否有SAN属性 |
openssl x509 -in server.crt -noout -text
3、方式二:通过命令行方式 |
可以直接通过命令行方式来生成SAN类型的证书,
即在openssl.cnf文件里面的修改通过命令行的方式设置
3.1、生成证书签名client.csr |
openssl req -newkey rsa:2048 -nodes -keyout client.key \
-subj "/C=CN/ST=beijing/L=beijing/O=tt/OU=dd/CN=golang-study" \
-reqexts SAN \
-config <(cat /etc/pki/tls/openssl.cnf \
<(printf "\n[SAN]\nsubjectAltName=DNS:*.org.golang.com,DNS:*.www.golang.com")) \
-out client.csr
查看证书签名里,是否有SAN请求信息
openssl req -noout -text -in client.csr
备注:
如果需要支持IP地址的话,可以参考下面的形式:
openssl req -newkey rsa:2048 -nodes -keyout client.key \
-subj "/C=CN/ST=beijing/L=beijing/O=tt/OU=dd/CN=golang-study" \
-reqexts SAN \
-config <(cat /etc/pki/tls/openssl.cnf \
<(printf "\n[SAN]\nsubjectAltName=DNS:*.org.golang.com,DNS:*.www.golang.com,IP:10.211.55.10,IP:10.211.55.11")) \
-out client.csr
在命令行模式下,
语法形式是:
subjectAltName=DNS:*.org.golang.com,DNS:*.www.golang.com,IP:10.211.55.10,IP:10.211.55.11
分隔符为逗号,
存在相关的key都是DNS, IP
如果是配置文件形式:
最终效果形式:
3.2、利用根证书ca.crt, 证书签名client.csr来生成证书client.crt |
openssl x509 -req -days 365 \
-in client.csr -out client.crt \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-extensions SAN \
-extfile <(cat /etc/pki/tls/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:*.org.golang.com,DNS:*.www.golang.com"))
或者
openssl x509 -req -days 365 -in client.csr -out client.crt -CA ca.crt -CAkey ca.key -CAcreateserial -extensions SAN -extfile <(cat /etc/pki/tls/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:*.org.golang.com,DNS:*.www.golang.com"))
查看生成的证书里,是否包含了SAN信息
openssl x509 -in client.crt -noout -text
下一篇文章