如何在Windows 10的本地nginx的localshot环境上启用HTTPS

Nginx已经可以支持Windows了,这对于在Windows上开发的程序员来说,是个不错的消息。

nginx的各个版本的下载地址:http://nginx.org/en/download.html

如果我们想在本地的nginx上支持HTTPS,仅仅是为了开发和调试的需要,这时候肯定不会去想花钱去申请第三方的SSL证书,那该怎么做呢?

不难,按照下面这几步来:

Install OpenSSL

这个步骤我们有两个选择:

1. 如果我们装过了Git for Windows

SSL的可执行程序openssl.exe已经安装在Git的这个目录\Git\mingw64\bin下,一般在这个目录:C:\Program Files\Git\mingw64\bin

2. 如果还没有安装过Git for Windows,那么可以单独下载OpenSSL来安装。

下载地址:https://slproweb.com/products/Win32OpenSSL.html

要下载Win64 OpenSSL v1.1.0L文件来安装,不要下载最新的3.0.0的版本来安装,否则可能会遇到类似的错误:

Error configuring OpenSSL
27848:error:25078067:DSO support routines:WIN32_LOAD:could not load the shared library:.\crypto\dso\dso_win32.c:179:filename(providers.dll)
27848:error:25070067:DSO support routines:DSO_load:could not load the shared library:.\crypto\dso\dso_lib.c:233:
27848:error:0E07506E:configuration file routines:MODULE_LOAD_DSO:error loading dso:.\crypto\conf\conf_mod.c:271:module=providers, path=providers
27848:error:0E076071:configuration file routines:MODULE_RUN:unknown module name:.\crypto\conf\conf_mod.c:212:module=providers

安装完成之后,要添加两个新的环境变量和修改Path环境变量:

OPENSSL_CONF,这个变量设置为openssl.cfg文件的路径。比如:C:\Program Files\OpenSSL-Win64\bin\openssl.cfg或者C:\Program Files\Git\mingw64\ssl\openssl.cnf

OPENSSL_HOME,这个变量设置为OpenSSL的bin目录的路径。比如:C:\Program Files\OpenSSL-Win64\bin 或者C:\Program Files\Git\mingw64\bin

另外,也把bin目录的路径加到Path环境变量里面去。

这样,安装准备工作就完成了,我们接下来到生成证书的步骤。

生成证书

1. 创建一个私钥

在nginx的安装目录下,创建一个SSL的目录,在这个目录下,我们执行这个指令:

openssl genrsa -des3 -out rootSSL.key 2048

在这一步,我们需要输入一个长度至少为4的密码,假定我们这里输入的是1234,这是执行的截图:

2. 创建一个证书文件

这一步里,我们根据上面创建的rootSSL.key来创建一个证书文件。

openssl req -x509 -new -nodes -key rootSSL.key -sha256 -days 3650 -out rootSSL.pem

-days这个参数表示证书的有效期,在上面的例子里,我们设置的是10年的时间。同时,需要输入上面第一步的密码1234。因为是本地测试的目的,所以后面的很多参数我们只管直接回车,直接用默认值。

3. 为本地的域名颁发一个证书

打开Windows的hosts文件c:\program files\windows\system32\drivers\etc\hosts,添加一行:

localhost 127.0.0.1 lema.fun

在这个例子里,我们把lema.fun域名映射到本地的IP上。然后,我们来给这个域名创建一个私钥。

openssl req -new -sha256 -nodes -out lema.fun.csr -newkey rsa:2048 -keyout lema.fun.key

需要输入的地方,直接回车就行。

这样,我们的证书都创建完了。

配置nginx

在nginx的我们站点的配置文件里,加上下面的内容:

server {
     listen       80;
     server_name  lema.fun;
     # New Lines below
     listen 443 ssl;
     ssl on; 
     ssl_certificate C:/nginx-1.14.2/SSL/lema.fun.csr;
     ssl_certificate_key C:/nginx-1.14.2/SSL/lema.fun.key;
}

这样就可以通过https来访问我们本地的站点了。