OpenSSL自签发CA证书chrome浏览器安全访问

前言

接到这样一个需求:内网通过IP地址访问某系统,需要使用 https,而且不能有不安全的提示,如下图:

不允许这样的情况存在,这就需要使用 openssl 进行自签解决。

OpenSSL 自签证书

安装 openssl

yum install openssl openssl-devel -y

mkdir -pv /etc/ssl/private

使用openssl 生成 SSL key 和 CSR

cd /etc/ssl/private/

openssl req -new -newkey rsa:2048 -sha256 -nodes -out 192.168.199.104.csr -keyout 192.168.199.104.key -subj "/C=CN/ST=Beijing/L=Beijing/O=Super Inc./OU=Web Security/CN=192.168.199.104"

openssl x509 -req -days 365 -in 192.168.199.104.csr -signkey 192.168.199.104.key -out 192.168.199.104.crt

配置nginx支持 ssl

nginx -t

nginx -s reload

chrome 添加信任证书

将上面生成的 192.168.199.104.crt 拷贝到 windows 并导入 chrome

chrome -> 设置 -> 隐私设置和安全性 -> 管理证书 -> 导入

chrome 浏览器导入证书访问:

火狐 浏览器导入证书访问:

因此,这里对 chrome 浏览器需要做特殊的操作:

首先删除之前导入的证书

添加附加用途

解决Chrome不能识别证书通用名称NET::ERR_CERT_COMMON_NAME_INVALID错误

[root@nginx(192.168.199.104) ~]#cd /etc/ssl/private/

[root@nginx(192.168.199.104) /etc/ssl/private]#ls

192.168.199.104.crt 192.168.199.104.csr 192.168.199.104.key

[root@nginx(192.168.199.104) /etc/ssl/private]#rm -rf *

//添加如下文件

[root@nginx(192.168.199.104) /etc/ssl/private]#vim http.ext

keyUsage = nonRepudiation, digitalSignature, keyEncipherment

extendedKeyUsage = serverAuth, clientAuth

subjectAltName=@SubjectAlternativeName

[ SubjectAlternativeName ]

IP.1=127.0.0.1

IP.2=192.168.199.104 # 内网访问的IP地址

[root@nginx(192.168.199.104) /etc/ssl/private]#openssl req -new -newkey rsa:2048 -sha256 -nodes -out 192.168.199.104.csr -keyout 192.168.199.104.key -subj "/C=CN/ST=Beijing/L=Beijing/O=Super Inc./OU=Web Security/CN=192.168.199.104"

[root@nginx(192.168.199.104) /etc/ssl/private]#openssl x509 -req -days 365 -in 192.168.199.104.csr -signkey 192.168.199.104.key -out 192.168.199.104.crt -extfile http.ext

然后再次将 192.168.199.104.crt 下载到 window 导入 chrome 。

注意:这里需要重新载入下 nginx,清空下 chrome 的缓存,再次启动。

这样就解决了,chrome 自签ssl证书不安全链接的问题。

总结

(1)chrome 需要添加附属文件

IP地址访问:

[root@nginx(192.168.199.104) /etc/ssl/private]#cat http.ext

keyUsage = nonRepudiation, digitalSignature, keyEncipherment

extendedKeyUsage = serverAuth, clientAuth

subjectAltName=@SubjectAlternativeName

[ SubjectAlternativeName ]

IP.1=127.0.0.1

IP.2=192.168.199.104

域名访问:

[root@nginx(192.168.199.104) /etc/ssl/private]#cat http.ext

keyUsage = nonRepudiation, digitalSignature, keyEncipherment

extendedKeyUsage = serverAuth, clientAuth

subjectAltName=@SubjectAlternativeName

[ SubjectAlternativeName ]

DNS.1=super.com

DNS.2=www.super.com

(2)两条命令生成证书

openssl req -new -newkey rsa:2048 -sha256 -nodes -out 192.168.199.104.csr -keyout 192.168.199.104.key -subj "/C=CN/ST=Beijing/L=Beijing/O=Super Inc./OU=Web Security/CN=192.168.199.104"

openssl x509 -req -days 365 -in 192.168.199.104.csr -signkey 192.168.199.104.key -out 192.168.199.104.crt -extfile http.ext

(3)将 192.168.199.104.crt 导入到 chrome 受信任的根证书颁发机构

(4)重载 nginx 并清除 chrome 缓存访问。

[an error occurred while processing the directive]