grpc、https、oauth2等认证专栏实战3: 使用openssl来制作san类型的证书

已发表专栏的入口(订阅即可观看所有专栏)
0  grpc-go、protobuf、multus-cni 技术专栏 总入口

1  grpc-go 源码剖析与实战  文章目录

2  Protobuf介绍与实战 图文专栏  文章目录

3  multus-cni   文章目录(k8s多网络实现方案)

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

在这里插入图片描述

下一篇文章

  数字签名的基本流程介绍

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码二哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值