• windows下搭建nginx服务器及实现nginx支持https配置流程


    最近刚接触到了tomcat结合nginx做网站的负载均衡。之前对tomcat搭配nginx实现负载均衡也写过,在上一篇的博客中,最近遇到的问题是要在http的基础上支持https。也就是支持加密的请求。在网上也查了很多的资料,下面这篇个人觉着说的换很不错,记录一下。讲解了如何生成https证书,如何在自己的nginx服务器上配置支持https。

    首先要说明为什么要实现https?

      HTTP全名超文本传输协议,客户端据此获取服务器上的超文本内容。超文本内容则以HTML为主,客户端拿到HTML内容后可根据规范进行解析呈现。因此,HTTP主要负责的是“内容的请求和获取”。问题就出在这部分。行监控、劫持、阻挡等行为很容易导致网站泄密,一些关键参数比如登录密码开发者会在客户端进行MD5加密,不过互联网所承载的机密信息远不只是密码,搜索内容同样属于敏感信息。现如今,百度、谷歌、Github等网站已经全站启用https,https就像是给网站上了一个“锁”,HTTPS做的就是给请求加密,让其对用户更加安全。对于自身而言除了保障用户利益外,还可避免本属于自己的流量被挟持,以保护自身利益。所以在我看来,终有一天HTTPS会实现全网普及。

           这个介绍言简意赅,我们知道了平常我们在访问一些银行或者支付的网站以及12306的时候发现里面都使用了https,上面讲解了之后大家应该对https是什么,干什么的有个了解了。下面进入正题,先说说这个证书是怎么生成的。

    步骤:

    1. 安装Openssl

      下载地址:http://slproweb.com/products/Win32OpenSSL.html (根据系统选择32位或者64位版本下载安装)。

      下载完成后,进行安装,我安装在了 C:wnmpOpenSSL-Win64文件夹中。

    2. 安装ActivePerl (此软件目的为了解析pl文件,部分系统不安装也可以实现本教程的功能,安装该软件目的为了学习perl)。

      下载地址:http://www.activestate.com/activeperl/downloads/  (根据系统选择win32或者win64版本下载安装)。

    3. 配置环境变量

      在环境变量中添加环境变量

        变量名: OPENSSL_HOME            变量值:C:wnmpOpenSSL-Win64in;        (变量值为openssl安装位置)

        在path变量结尾添加如下 : %OPENSSL_HOME%;

    4. 生成证书   

      (1) 首先在 nginx安装目录中创建ssl文件夹用于存放证书。比如我的文件目录为 C:wnmp ginxssl

         以管理员身份进入命令行模式,进入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文件夹内出现两个文件:

    ps : 如果你觉着上面这样一步步的太费劲,可以直接使用一个命令来实现,主要是要将你的网站信息进行一个说明,然后生成一个csr的文件,然后将这个包含有你网站信息的csr文件交给认证机构,认证机构会根据你的csr中的信息生成一个crt的证书文件。下面是一个命令来执行上面的分步的操作。

    在openssl的认证中,

    普通的 SSL 证书认证分两种形式,一种是 DV(Domain Validated),还有一种是 OV (Organization Validated),前者只需要验证域名,后者需要验证你的组织或公司,在安全性方面,肯定是后者要好。

    无论你用 DV 还是 OV 生成私钥,都需要填写一些基本信息,这里我们假设如下:

    域名,也称为 Common Name,因为特殊的证书不一定是域名:example.com

    组织或公司名字(Organization):Example, Inc.

    部门(Department):可以不填写,这里我们写Web Security

    城市(City):Beijing

    省份(State / Province):Beijing

    国家(Country):CN

    加密强度:2048 位,如果你的机器性能强劲,也可以选择 4096 位

    按照以上信息,使用 OpenSSL 生成 key 和 csr 的命令如下

    openssl req -new -newkey rsa:2048 -sha256 -nodes -out example_com.csr -keyout example_com.key -subj "/C=CN/ST=Beijing/L=Beijing/O=Example Inc./OU=Web Security/CN=example.com"

    PS:如果是泛域名证书,则应该填写*.example.com

    你可以在系统的任何地方运行这个命令,会自动在当前目录生成example_com.csr和example_com.key这两个文件。我们看一下这个文件中的内容,其实就是使用rsa对你的网站信息进行加密后的一段加密字符串:

    -----BEGIN CERTIFICATE REQUEST-----
    MIICujCCAaICAQAwdTELMAkGA1UEBhMCQ04xEDAOBgNVBAgTB0JlaWppbmcxEDAO  
    BgNVBAcTB0JlaWppbmcxFTATBgNVBAoTDEV4YW1wbGUgSW5jLjEVMBMGA1UECxMM  
    V2ViIFNlY3VyaXR5MRQwEgYDVQQDEwtleGFtcGxlLmNvbTCCASIwDQYJKoZIhvcN  
    AQEBBQADggEPADCCAQoCggEBAPME+nvVCdGN9VWn+vp7JkMoOdpOurYMPvclIbsI  
    iD7mGN982Ocl22O9wCV/4tL6DpTcXfNX+eWd7CNEKT4i+JYGqllqP3/CojhkemiY  
    SF3jwncvP6VoST/HsZeMyNB71XwYnxFCGqSyE3QjxmQ9ae38H2LIpCllfd1l7iVp  
    AX4i2+HvGTHFzb0XnmMLzq4HyVuEIMoYwiZX8hq+kwEAhKpBdfawkOcIRkbOlFew  
    SEjLyHY+nruXutmQx1d7lzZCxut5Sm5At9al0bf5FOaaJylTEwNEpFkP3L29GtoU  
    qg1t9Q8WufIfK9vXqQqwg8J1muK7kksnbYcoPnNgPx36kZsCAwEAAaAAMA0GCSqG  
    SIb3DQEBBQUAA4IBAQCHgIuhpcgrsNwDuW6731/DeVwq2x3ZRqRBuj9/M8oONQen  
    1QIacBifEMr+Ma+C+wIpt3bHvtXEF8cCAJAR9sQ4Svy7M0w25DwrwaWIjxcf/J8U  
    audL/029CkAuewFCdBILTRAAeDqxsAsUyiBIGTIT+uqi+EpGG4OlyKK/MF13FxDj  
    /oKyrSJDtp1Xr9R7iqGCs/Zl5qWmDaLN7/qxBK6vX2R/HLhOK0aKi1ZQ4cZeP7Mr
    8EzjDIAko87Nb/aIsFyKrt6Ze3jOF0/vnnpw7pMvhq+folWdTVXddjd9Dpr2x1nc  
    y5hnop4k6kVRXDjQ4OTduQq4P+SzU4hb41GIQEz4  
    -----END CERTIFICATE REQUEST-----

    这个 CSR 文件就是你需要提交给 SSL 认证机构的,当你的域名或组织通过验证后,认证机构就会颁发给你一个example_com.crt

    而example_com.key是需要用在 Nginx 配置里和example_com.crt配合使用的,需要好好保管,千万别泄露给任何第三方。

    哈哈哈  如果我们就是自己简单的学习,想必我们是不会提交给认证机构的,别着急,不提交给认证机构我们也能自己生成证书,只是这个证书在我们使用的时候回提示不是浏览器可以接受的,也就是不安全的,但是我们自己学习用没有关系。

    这里说一点哈,如果你在设置证书的时候设置了密码,这里是如何去除密码。

         在加载SSL支持的Nginx并使用上述私钥时除去必须的口令,否则会在启动nginx的时候需要输入密码。

         复制lee.key并重命名为lee.key.org 

         可以使用此命令行,也可以使用鼠标操作     copy example.key example.key.org

         去除口令,在命令行中执行此命令:  openssl rsa -in example.key.org -out example.key  (lee为自定义文件名)

         如下图所示,此命令需要输入刚才设置的密码。

          

       (5)生成crt证书

         在命令行中执行此命令: openssl x509 -req -days 365 -in example.csr -signkey example.key -out example.crt  (lee为自定义文件名)

          

          证书生成完毕,ssl文件夹中一共生成如下4个文件,我们需要使用到的是example.crt和example.key。

          

    上面是我们生成我们的证书的一个过程,下面看看如何在nginx中配置来支持https。

    修改nginx.conf文件

        nginx.conf文件位于:C:wnmp ginxconf

        找到该文件中如下代码的位置进行修改: 保证本机的端口不被占用 443 和 80

    复制代码
    复制代码
    # HTTPS server
        #
        #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.example.com;
        
            ssl_certificate      C:/wnmp/nginx/ssl/example.crt;
            ssl_certificate_key  C:/wnmp/nginx/ssl/example.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/example;
                index  index.html index.htm index.php;
            }
    
                   root           C:/wnmp/example;
                   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。

         在浏览器中,访问 https://www.example.com。发现出现证书认证,并能够成功访问。(www.example.com为生成证书时,Common Name输入的域名)

    上面这是一个生成证书和如何结合nginx使用的简单说明,但是我们相信在这个过程中肯定会遇到很多很多的坑,遇到一个填一个吧,把所有的坑填了我认为你对https和nginx的理解就上了一个档次了。

  • 相关阅读:
    通用指令-数据库通用操作
    通用指令-key通用操作
    数据类型-sorted_set类型基本操作和扩展操作
    数据类型-set类型基本操作和扩展操作
    数据类型-list类型基本操作和扩展操作
    数据类型-hash类型基本操作和扩展操作
    ORACLE 函数 NVL, NVL2, NULLIF
    maven 配置jdk版本
    maven仓库添加自己的jar包
    Map 中的EntrySet()
  • 原文地址:https://www.cnblogs.com/duanxiaojun/p/6903936.html
Copyright © 2020-2023  润新知