03-OpenSSL-创建带SAN扩展的证书并进行CA自签

1,645 阅读2分钟

01-从HTTP到HTTPS

02-HTTPS证书生成、验签 、证书链

03-OpenSSL-创建带SAN扩展的证书并进行CA自签

04-HTTPS证书格式及转换

05-HTTPS 秘钥库与证书(Java)

06-HTTPS单向认证及Java案例

07-HTTPS双向认证及Java案例

08-HTTPS在HTTPClient的应用

10-HTTPS在Nginx中的配置

11-HTTPS在SpringBoot中的配置

12-HTTPS在Tomcat配置

13-SSL-Mysql配置与应用

14-HTTPS在Redis中的配置

15-HTTPS基于Feign的远程调用

16-HTTPS在Eureka中的配置

一、问题描述

小编之前提供的利用OpenSSL创建自签名证书的方法在chrome上再次遇到了证书无效的错误: image.png 原因概述Chrome浏览器要求证书中必须包含“Subject Alternative Names”这一参数。SAN 关于这个参数的解释:

二、什么是 SAN

SAN(Subject Alternative Name) 是 SSL 标准 x509 中定义的一个扩展。使用了 SAN 字段的 SSL 证书,可以扩展此证书支持的域名,使得一个证书可以支持多个不同域名的解析。 来看看百度的证书,百度证书的扩展域名有这么多,其中还有了*.hao123.com,那我们再看看www.hao123.com的证书 发现的确是用的前面的百度证书 所以SAN带来的好处就可以看出来了,一个证书可以用在各种不同的域名下,不需要一个域名买一个证书了。

三、利用OpenSSL创建证书

因为是本地环境,直接用OpenSSL给自己颁发一个CA根证书用于后面给服务器做CA签署。

  1. 生成CA密钥
 openssl genrsa -des3 -out ca.key 2048
  1. 生成CA根证书
 openssl req -sha256 -new -x509 -days 365 -key ca.key -out ca.crt \
     -subj "/C=CN/ST=GD/L=SZ/O=lee/OU=study/CN=testRoot"
  1. 生成服务器密钥
 openssl genrsa -des3 -out server.key 2048
  1. 生成服务器证书请求文件
 openssl req -new \
     -sha256 \
     -key server.key \
     -subj "/C=CN/ST=GD/L=SZ/O=lee/OU=study/CN=huanghe.com" \
     -reqexts SAN \
     -config <(cat /etc/pki/tls/openssl.cnf \
         <(printf "[SAN]\nsubjectAltName=DNS:*.huanghe.com,DNS:*.baidu.com")) \
     -out server.csr
  1. CA签署服务器证书;如下出现问题可以参考:
 openssl ca -in server.csr \
         -md sha256 \
         -keyfile ca.key \
     -cert ca.crt \
     -extensions SAN \
     -config <(cat /etc/pki/tls/openssl.cnf \
         <(printf "[SAN]\nsubjectAltName=DNS:*.huanghe.com,DNS:*.baidu.com")) \
     -out server.crt

之后把生成好的服务器证书和服务器密钥在服务器(ngnix,tomcat)里配置好,并且把ca.crt证书导入到浏览器的受信任的根证书颁发机构里,在浏览器访问就不会有红叉叉了。关于chrome中导入自签名证书: 【chrome】安装证书并配置为受信任网站连接(windows) 参考文章:

注意事项

  1. -subj "/C=CN/ST=GD/L=SZ/O=lee/OU=study/CN=testRoot"这行可以不要,会有命令交互填写相关信息。

  • 哈希算法不要使用sha1,因为Chrome浏览器下会提示不安全,上面都是用的sha256。
  • /etc/pki/tls/openssl.cnf文件是缺省的OpenSSL配置文件,可能环境不同路径也不同。
  • 服务器证书请求文件的国家,省,市要和CA证书一致,这个在openssl.cnf默认配置中指定了,可以修改。

解决方案 修改待用的openssl配置文件

  1. 拷贝openssl配置文件以备修改
 cp /etc/pki/tls/openssl.cnf /tmp/ 

2 修改这一openssl.cnf文件 (1) 找到[ req ] 段落,添加如下配置:

  req_extentions = v3_req

image.png (2) 添加v3_req配置信息

 [ v3_req ]
 # Extensions to add to a certificate request
 # basicConstraints = CA:FALSE
 # keyUsage = nonRepudiation, digitalSignature, keyEncipherment
 subjectAltName = @alt_names

(3) 添加alt_names配置信息

[ alt_names ]
DNS.1 = www.huanghe.com

注:这里填入的即为Subject Alternative Names的域名名称

创建证书

  1. 创建crt格式的自签名证书
openssl req -sha256 -newkey rsa:2048 -nodes -keyout  root.key -x509 -days 3650 -out  root.crt -config /tmp/openssl.cnf -extensions v3_req

# 填写的信息如下:
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Wuhan
Locality Name (eg, city) [Default City]:Wuhan
Organization Name (eg, company) [Default Company Ltd]:huawei
Organizational Unit Name (eg, section) []:test
Common Name (eg, your name or your server's hostname) []:www.huanghe.com
Email Address []:huanghe39@huawei.com

得到 root.key 私钥文件 和 root.crt 证书文件

  1. 创建服务端证书

更多内容关注微信公众号 ”前后端技术精选“,或者语雀,里面有更多知识:www.yuque.com/riverzmm/uu… 《安全》