抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >


自建 https 证书

生成 nginx 的证书与配置 chrome 安全告警的问题

安装 openssl

生成根证书

openssl req -x509 -nodes -days 1461 -newkey rsa:2048 -subj "/C=CN/ST=MyProvince/L=MyCity/O=MyOrganization" -keyout CA-private.key -out CA-certificate.crt -reqexts v3_req -extensions v3_ca

生成私钥

openssl genrsa -out private.key 2048
openssl req -new -key private.key -subj "/C=CN/ST=MyProvince/L=MyCity/O=MyOrganization/CN=xxx.xxx.xxx.xxx" -sha256 -out private.csr

解决 Chrome 安全警告

按照上面的流程,需要注意的是,在默认情况下生成的证书一旦选择信任,在 Edge, Firefox 等浏览器都显示为安全,但是 Chrome 仍然会标记为不安全并警告拦截,这是因为 Chrome 需要证书支持扩展 Subject Alternative Name, 因此生成时需要特别指定 SAN 扩展并添加相关参数。
SAN Extension 所需配置文件关键属性:

req_distinguished_name: 一节的内容与上面 -subj 一样都是证书的附加信息
subjectAltName: 是最关键的属性,取值有两种情况,除前缀外值应与上一步 -subj 中指定的 CN 参数值相同:
如果是为某一域名签发证书,则其值可为 DNS:www.example.com 或者使用通配符 DNS:*.example.com;
如果为 IP 地址颁发证书,则应该使用 IP:xxx.xxx.xxx.xxx 的形式。

[ req ]
default_bits = 2048
distinguished_name = req_distinguished_name
req_extensions = san
extensions = san
[ req_distinguished_name ]
countryName = CN
stateOrProvinceName = MyProvince
localityName = MyCity
organizationName = MyOrganization
[SAN]
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = IP:xxx.xxx.xxx.xxx

将上述内容放到一个文件中,命名为 private.ext 执行命令,生成证书

openssl x509 -req -days 1461 -in private.csr -CA CA-certificate.crt -CAkey CA-private.key -CAcreateserial -sha256 -out private.crt -extfile private.ext -extensions SAN

nginx 中配置如下:

server {
listen 443;
server_name localhost;
ssl on;
ssl_certificate /alidata/ssl/private.crt;
ssl_certificate_key /alidata/ssl/private.key;
}

使用证书

生成的具体域名证书和私钥可在 nginx 中使用,然后再客户端所在电脑导入根证书:

Windows 需要添加根证书至 受信任的根证书颁发机构
macOS 将其导入 钥匙串访问 并选择信任
另外 Windows 快捷安装根证书脚本如下 (需要管理员权限):

certutil -addstore -f -enterprise -user root ".\CA-certificate.crt"

在 window 或者 mac 上安装 private.crt 文件后,nginx 上页面或者接口就可以正常访问了。

推荐阅读
Nginx配置 Nginx配置 Nginx隐藏版本号信息 Nginx隐藏版本号信息 如何加密你的 Python 代码 如何加密你的 Python 代码 开放 API 接口 开放 API 接口 大数据处理技术-HDFS的命令行使用 大数据处理技术-HDFS的命令行使用 Centos7安装Anaconda3 Centos7安装Anaconda3

留言区

Are You A Robot?