设为首页 收藏本站
查看: 1209|回复: 0

[经验分享] windows下搭建nginx服务器及实现nginx支持https配置流程

[复制链接]

尚未签到

发表于 2017-12-22 23:13:21 | 显示全部楼层 |阅读模式
  最近刚接触到了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:\wnmp\OpenSSL-Win64文件夹中。
  2. 安装ActivePerl (此软件目的为了解析pl文件,部分系统不安装也可以实现本教程的功能,安装该软件目的为了学习perl)。
  下载地址:http://www.activestate.com/activeperl/downloads/  (根据系统选择win32或者win64版本下载安装)。
  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文件名可以自定义),如下图所示:
DSC0000.png

  输入密码后,再次重复输入确认密码。记住此密码,后面会用到。
  (3)创建csr证书
  在命令行中执行命令:  openssl req -new -key lee.key -out lee.csr    (key文件为刚才生成的文件,lee为自定义文件名)
DSC0001.png

  如上图所示,执行上述命令后,需要输入信息。输入的信息中最重要的为 Common Name,这里输入的域名即为我们要使用https访问的域名。
  以上步骤完成后,ssl文件夹内出现两个文件: DSC0002.png
  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为自定义文件名)
  如下图所示,此命令需要输入刚才设置的密码。
DSC0003.png

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

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


上面是我们生成我们的证书的一个过程,下面看看如何在nginx中配置来支持https。
  修改nginx.conf文件
  nginx.conf文件位于:C:\wnmp\nginx\conf
  找到该文件中如下代码的位置进行修改: 保证本机的端口不被占用 443 和 80

DSC0006.gif
  

# 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的理解就上了一个档次了。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-427006-1-1.html 上篇帖子: Centos7下PHP的卸载与安装nginx 下篇帖子: 利用nginx与nginx-rtmp
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表