Windows下Nginx配置SSL实现Https访问(包含证书⽣成)
Windows下Nginx配置SSL实现Https访问(包含证书⽣成)
  ⾸先要说明为什么要实现https?
  HTTP全名超⽂本传输协议,客户端据此获取服务器上的超⽂本内容。超⽂本内容则以HTML为主,客户端拿到HTML内容后可根据规范进⾏解析呈现。因此,HTTP主要负责的是“内容的请求和获取”。问题就出在这部分。⾏监控、劫持、阻挡等⾏为很容易导致⽹站泄密,⼀些关键参数⽐如登录密码开发者会在客户端进⾏MD5加密,不过互联⽹所承载的机密信息远不只是密码,搜索内容同样属于敏感信息。现如今,百度、⾕歌、Github等⽹站已经全站启⽤https,https就像是给⽹站上了⼀个“锁”,HTTPS做的就是给请求加密,让其对⽤户更加安全。对于⾃⾝⽽⾔除了保障⽤户利益外,还可避免本属于⾃⼰的流量被挟持,以保护⾃⾝利益。所以在我看来,终有⼀天HTTPS会实现全⽹普及。
  下⾯进⼊正题。
  说明:此教程适合已经配置好WNMP环境,并配置Virtualhost实现多站点的同学。如果您尚未配置,请参照我之前的⽂章进⾏配置。
  实现Https⾸先需要向管理机构申请证书,⽽我们此次由于是练习⽬的,所以通过Openssl⾃⼰⽣成证书。
⾸先我们需要⽤到⽣成证书的Openssl软件。
步骤:
1. 安装Openssl
  下载完成后,进⾏安装,我安装在了 C:\wnmp\OpenSSL-Win64⽂件夹中。
2. 安装ActivePerl (此软件⽬的为了解析pl⽂件,部分系统不安装也可以实现本教程的功能,安装该软件⽬的为了学习perl)。
3. 配置环境变量
  在环境变量中添加环境变量
    变量名: OPENSSL_HOME            变量值:C:\wnmp\OpenSSL-Win64\bin;        (变量值为openssl安装位置)
    在path变量结尾添加如下: %OPENSSL_HOME%;
4. ⽣成证书 
  (1)⾸先在 nginx安装⽬录中创建ssl⽂件夹⽤于存放证书。⽐如我的⽂件⽬录为 C:\wnmp\nginx\ssl
     以管理员⾝份进⼊命令⾏模式,进⼊ssl⽂件夹。命令为:cd  c:/wnmp/nginx/ssl
  (2)创建私钥
     在命令⾏中执⾏命令:openssl genrsa -des3 -out lee.key 1024    (lee⽂件名可以⾃定义),如下图所⽰:
      输⼊密码后,再次重复输⼊确认密码。记住此密码,后⾯会⽤到。
  (3)创建csr证书
     在命令⾏中执⾏命令:openssl req -new -key lee.key -out lee.csr(key⽂件为刚才⽣成的⽂件,lee为⾃定义⽂件名)
     如上图所⽰,执⾏上述命令后,需要输⼊信息。输⼊的信息中最重要的为 Common Name,这⾥输⼊的域名即为我们要使⽤https访问的域名。
     以上步骤完成后,ssl⽂件夹内出现两个⽂件:
  (4)去除密码。
    在加载SSL⽀持的Nginx并使⽤上述私钥时除去必须的⼝令,否则会在启动nginx的时候需要输⼊密码。
     复制lee.key并重命名为
     可以使⽤此命令⾏,也可以使⽤⿏标操作copy lee.key
     去除⼝令,在命令⾏中执⾏此命令:openssl rsa -in -out lee.key  (lee为⾃定义⽂件名)
     如下图所⽰,此命令需要输⼊刚才设置的密码。
   (5)⽣成crt证书
     在命令⾏中执⾏此命令:openssl x509 -req -days 365 -in lee.csr -signkey lee.key -  (lee为⾃定义⽂件名)
    证书⽣成完毕,ssl⽂件夹中⼀共⽣成如下4个⽂件,我们需要使⽤到的是和lee.key。
5. 修改f⽂件
    f⽂件位于:C:\wnmp\nginx\conf
    到该⽂件中如下代码的位置进⾏修改:
# HTTPS server
#
nginx ssl证书配置#server {
#    listen      443 ssl;
#    server_name  localhost;
#    ssl_certificate      cert.pem;
#    ssl_certificate_key  cert.key;
#    ssl_session_cache    shared:SSL:1m;
#    ssl_session_timeout  5m;
#    ssl_ciphers  HIGH:!aNULL:!MD5;
#    ssl_prefer_server_ciphers  on;
#    location / {
#        root  html;
#        index  index.html index.htm;
#    }
#}
     修改为:
# HTTPS server
#
#modify by lee 20160907 for https -s
server {
listen      443 ssl;
server_name    www.lee;
ssl_certificate      C:/wnmp/nginx/;
ssl_certificate_key  C:/wnmp/nginx/ssl/lee.key;
ssl_session_cache    shared:SSL:1m;
ssl_session_timeout  5m;
ssl_ciphers  HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers  on;
location / {
root  C:/wnmp/lee;
index  index.html index.htm index.php;
}
root          C:/wnmp/lee;
fastcgi_pass  127.0.0.1:9001;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
include        fastcgi_params;
}
}
#modify by lee 20160907 for https -s
     重启nginx。
     (执⾏此步骤时,需要配置好Virtual Host,并且在www.lee开放⽬录中添加了index.php默认⼊⼝访问⽂件。)
    上⾯的https被红⾊划线是因为我们使⽤的是⾃⼰⽣成的证书,此证书不受浏览器信任,如果想使其变为绿⾊,则需要向证书管理机构进⾏申请。
6. 添加重定向,⾃动跳转使⽤https。
     在f中virtual host中如下代码位置添加⼀⾏代码:
listen      80;
server_name  www.lee;
#modify by lee 20160907 for https Redirect -s
rewrite ^(.*) $server_name$1 permanent;
#modify by lee 20160907 for https Redirect -e                             重启nginx。
  ⾄此,https访问配置成功完成。
  如有不明之处,欢迎留⾔,如有错误敬请指正。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。