macOS下配置受信任的证书,从而无需认证进行https访问

12,776 阅读2分钟

[问题描述]

通过https起的服务,如果我们之前没有信任过证书,那么会出现下面这种情况。

window下点击高级,信任访问即可,但还是多了一步。而macOS下则直接不行。这里做下macOS信任证书的总结,以便下次查询。

1. 找一个空的文件夹,依次执行以下命令:

openssl genrsa -des3 -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem

这边证书按照真实的填或者瞎编,只要按照按照其格式即可

2. 在mac下添加信任

在Mac(10.15.5的系统)上打开“钥匙串访问”,然后转到“系统”中的证书列表,然后将rootCA.pem直接往里面拖, 并将“使用此证书时:”下拉列表中的“ 始终信任 ”选中

ps: 这里一定要选择始终信任!

3. 域SSL证书

根SSL证书现在可以用来为您的本地localhost开发环境专门发行证书。

创建一个新的OpenSSL配置文件,server.csr.cnf以便在创建证书时可以导入这些设置,而不必在命令行上输入它们。


[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn

[dn]
C=US
ST=RandomState
L=RandomCity
O=RandomOrganization
OU=RandomOrganizationUnit
emailAddress=hello@example.com
CN = localhost

创建一个v3.ext文件,以创建一个X509 v3证书。

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost

创建证书密钥以localhost使用存储在其中的配置设置server.csr.cnf。该密钥存储在server.key。

openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key -config <(cat server.csr.cnf)

证书签名请求通过我们之前创建的根SSL证书颁发,创建出一个localhost的域名证书。输出是一个名为的证书文件server.crt。

openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 500 -sha256 -extfile v3.ext

下面以node中的一个服务作为例子:

在用Node.js编写的Express应用程序中,以下是您要做的事情。确保你只为你的本地环境做到这一点。不要在生产中使用它。

var path = require('path')
var fs = require('fs')
var express = require('express')
var https = require('https')

var certOptions = {
  key: fs.readFileSync(path.resolve('build/cert/server.key')),
  cert: fs.readFileSync(path.resolve('build/cert/server.crt'))
}

var app = express()

var server = https.createServer(certOptions, app).listen(443)

参考文献

juejin.cn/post/684490…