码迷,mamicode.com
首页 > Web开发 > 详细

nginx配置https

时间:2015-07-09 14:45:34      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:nginx ssl https



Nginx+SSL配置Https服务器 

1.何为SSL:


SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本。SSL证书通 过在客户端浏览器和Web服务器之间建立一条SSL安全通


道(Secure socket layer(SSL)安全协 议是由Netscape Communication公司设计开发。该安全协议主要用来提供对用户和服务器的认 证;对


传送的数据进行加密和隐藏;确保数据在传送中不被改变,即数据的完整性,现已成为 该领域中全球化的标准。由于SSL技术已建立到所有主要


的浏览器和WEB服务器程序中,因此 ,仅需安装服务器证书就可以激活该功能了)。即通过它可以激活SSL协议,实现数据信息在 客户端和服务


器之间的加密传输,可以防止数据信息的泄露。保证了双方传递信息的安全性, 而且用户可以通过服务器证书验证他所访问的网站是否是真实


可靠。


2.生成SSL证书:


使用openssl工具来生成一个SSL证书, 由于是测试, 所以证书就不设密码了, 如果需要线 上使用的话, 需要向相关机构进行申请购买, 申请


证书的具体要求也因颁发商不同而不同, 看操


作吧.

首先生成个key文件:


#  openssl genrsa -des3 -out ssl.key 1024

<- 1024并不是固定的, 会由于要求不同而不同

<- ssl.key 是生成的key文件, 之后会用到, 一定保存好

<- 如果需要加密的话, 加参数就可以了, 具体加密方式不列举, 请找man

<- 如果使用加密的话, 会要求输入密码( 这个密码一定要保存好, 日后重启nginx都需要 )


使用key文件, 生成一个csr文件:

#  openssl req -new -key ssl.key -out ssl.csr

<- 测试可以一路回车, 如果是正式环境的话, 需要填写之中信息 <- 正式环境的话, 根据需求来填写详细信息


使用csr文件, key文件来颁发证书:

# openssl x509 -req -days 365 -in ssl.csr -signkey ssl.key -out ssl.crt 此时会在当前目录下生成一个ssl.crt的文件, 这个文件日


后要加到nginx配置文件里


配置Nginx: Nginx开启SSL模块:


Nginx配置Https主机, 必须要开启SSL模块, 如果没有开启的话, 需要重新编译Nginx 使用如下命令, 检查Nginx编译时是否加入了SSL模块的


支持


# ./sbin/nginx -V "查看Nginx版本及编译参数等信息"


nginx version: Apache/2.2.21

built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)

TLS SNI support enabled

configure arguments: --prefix=/usr/local/nginx-1.4.3 --with-http_stub_status_module


--with-http_ssl_module --add-module=nginx-devel-kit --add-module=lua-nginx-module --add-module=echo-nginx-module --add-


module=memc-nginx-module-master --add-module=redis2-nginx-module --add-module=set-misc-nginx-module-master --add-


module=nginx_upstream_check_module


可以看到--with-http_ssl_module, Nginx是开启了Nginx模块支持的, 如果查看Nginx编译参数时候, 没 有找到 ”--with-http_ssl_module


“ 参数, 那么就要重新编译Nginx了, 加上此参数即可


编辑Nginx配置文件:

使用你习惯的编辑器来编辑nginx的配置文件, 在server块添加以下几行:


    1  listen 443;


    2  ssl on;


    3  ssl_protocols SSLv2 SSLv3 TLSv1;


    4  ssl_ciphers HIGH:!aNULL:!MD5;


    5  ssl_prefer_server_ciphers on;


    6  ssl_session_timeout 10m;


    7  ssl_certificate /usr/local/nginx-1.4.3/conf/new_ssl/pay.xywy.com.crt;


    8  ssl_certificate_key /usr/local/nginx-1.4.3/conf/new_ssl/SSL.KEY; 


说明:

第1行: 使Nginx监听443端口

第2行: 开启SSL模块

第3行: 配置SSL支持的协议

第4行: 配置SSL加密方式

第5行: 配置依赖SSLv3和TLSv1协议的服务器密码将优先于客户端密码


第6行: 配置SSL会话超时时间

第7行: 配置SSL证书, 使用key文件, csr文件签发的证书

第8行: 配置SSL秘钥, 我们上一步生成的key文件


 


如果需要将所有http请求跳转到https的话,还需要在80端口的配置文件中添加以下一行


rewrite ^ https://pay.xywy.com$request_uri? permanent;


编辑好配置文件后, 重启Nginx.


ps: 重启Nginx最好stop再start, 否则可能会导致证书不生效, 重启时如果之前建立key文 件时, 使用了加密认证, 那么此时输入创建key文


件时, 输入的密码就可以了


配置时可能会出现的问题及解决方法:


E: 证书不生效

A1: 可能由于Nginx重启的时候使用的是reload, 而不是stop再start

A2: 可能由于配置里面, 一个server同时监听80和443两个端口, 如果说要同时支持http和


https的话, 将两个listen端口写在两个server里面. 


本文出自 “Study-Everyday” 博客,请务必保留此出处http://studys.blog.51cto.com/9736817/1672522

nginx配置https

标签:nginx ssl https

原文地址:http://studys.blog.51cto.com/9736817/1672522

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!