本地开发环境nginx配置HTTPS,使用https证书

解决方案

使用OpenSSL生成所有证书。

步骤1:根SSL证书

第一步是创建根安全套接字层(Secure Sockets Layer -SSL)证书。然后,可以使用此根证书对任意数量的独立域名的证书进行签名。如果您不熟悉SSL生态系统,DNSimple的这篇文章很好地介绍了根SSL证书。

生成一个RSA-2048密钥并将其保存到文件rootCA.key中。此文件将用作生成根SSL证书的密钥。每次使用此特定密钥生成证书时,都会提示您输入一个pass短语。

openssl genrsa -des3 -out rootCA.key 2048

你可以使用生成的密钥创建新的根SSL证书。将它保存到一个名为rootCA.pem的文件中。本证书有效期为1024天。你可以随意把它改成你想要的天数。还会提示您输入其他可选信息。

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

在这里插入图片描述

步骤2:信任根SSL证书

在使用新创建的根SSL证书开始颁发域证书之前,还有一个步骤。你需要告诉你的Mac要信任你的根证书,所以由它发出的所有证书也都是可信的。
打开Mac上的密钥链访问,进入系统密钥链中的证书类别。使用文件>导入项目导入rootCA.pem。双击导入的证书,并在“When using this certificate:”的选项下拉框中选择“始终信任”。
如果到目前为止正确地遵循了操作指引,那么你的证书在Keychain Access中应该是这样的。
在这里插入图片描述
window系统通过window+r组合键调出运行运行工具后,输入certlm.msc,之后导入rootCA.pem与server.crt,没有生成server.crt可以先走步骤3:域SSL证书。

在这里插入图片描述

步骤3:域SSL证书

现在可以使用根SSL证书专门为位于localhost的本地开发环境颁发证书。

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

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

[dn]
C = cn
ST = RandomState
L = RandomCity
O = RandomOrganization
OU = RandomOrganizationUnit
emailAddress = golang.zgl@gmail.com
CN = localhost

创建一个v3.ext文件以创建一个X509 v3证书。注意这里是如何指定subjectAltName的

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

[alt_names]
#这里可以是多个域名,如DNS.1、DNS.2、DNS.3 ...... 这行是备注可以删掉
DNS.1 = localhost
DNS.2 = api.abc.com

使用server.csr.cnf中存储的配置设置为本地主机创建证书密钥。此密钥存储在server.key中。

openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key -config 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

nginx配置

server {
    listen       443 http2 ssl;
    server_name  localhost;

    ssl_certificate      /Users/gre/Documents/证书/本地/server.crt;
    ssl_certificate_key  /Users/gre/Documents/证书/本地/server.key;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    location / {
        root   html;
        index  index.html index.htm;
    }
    
    location /ticket-api {
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host            $http_host;
        proxy_pass  http://localhost:11086;
    }
}

版权声明:本文为weixin_42322309原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。