服务器(6)--Nginx实现HTTPS网站设置


一、HTTPS


    全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司(Netscape)进行,并内置于其浏览器Netscape Navigator中,提供了身份验证与加密通讯方法。现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。


二、开启nginx的ssl模块


1、nginx没有安装

编译安装nginx时带上 --with-http_ssl_module配置就可以了。
./configure --with-http_ssl_module

2、nginx已经安装

查看nginx是否安装ssl模块

/usr/local/nginx/sbin/nginx -V


如果没有ssl模块,操作以下步骤:

1)进入nginx的源码包目录
2)重新配置
在刚才得到的编译信息后面加入 --with-http_ssl_module,如下:
./configure --prefix=/usr/local/nginx --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-http_gzip_static_module --http-client-body-temp-path=/var/temp/nginx/client --http-proxy-temp-path=/var/temp/nginx/proxy --http-fastcgi-temp-path=/var/temp/nginx/fastcgi --http-uwsgi-temp-path=/var/temp/nginx/uwsgi --http-scgi-temp-path=/var/temp/nginx/scgi --with-http_stub_status_module
--with-http_ssl_module
3)重新编译 make,不需要make install安装。否则会覆盖之前安装的nginx。
4)需要替换nginx二进制文件,先停止掉nginx进程;备份一下原来的启动脚本。
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old;
cp objs/nginx /usr/local/nginx/sbin/nginx;
5)查看nginx的模块:/usr/local/nginx/sbin/nginx –V ,看下是否把需要的模块编译进去了。
6)最后重新启动nginx


三、密钥和证书的生成


1、创建服务器证书密钥文件 cert.key
openssl genrsa -des3 -out cert.key 2048
这个命令会生成一个2048位的密钥,同时有一个des3方法加密的密码,如果不想每次都输入密码,可以输入下面的命令:
openssl genrsa -out cert.key 2048
建议用2048位密钥,少于此可能会不安全或很快将不安全


2、创建服务器证书的申请文件cert.csr(如果自己测试,可以省略此步骤。可以拿着这个文件去数字证书颁发机构(即CA)申请一个数字证书。CA会给你一个新的文件cert.crt,这个才是你的数字证书。如果是自己做测试,那么证书的申请机构和颁发机构都是自己,可以使用3中的命令生成数字证书。)
openssl req -new -key cert.key -out cert.csr
输出内容为:

Enter pass phrase for root.key: ← 输入前面创建的密码 (如果没有密码,则不出现此内容)
Country Name (2 letter code) [AU]:CN ← 国家代号,中国输入CN 
State or Province Name (full name) [Some-State]:BeiJing ← 省的全名,拼音 
Locality Name (eg, city) []:BeiJing ← 市的全名,拼音 
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany ← 公司英文名 
Organizational Unit Name (eg, section) []: ← 部门,可以不输入 
Common Name (eg, YOUR name) []: ← 名字,可以不输入 
Email Address []:admin@mycompany.com ← 电子邮箱,可随意填
Please enter the following ‘extra’ attributes 
to be sent with your certificate request 
A challenge password []: ← 可以不输入 
An optional company name []: ← 可以不输入


3、生成证书文件 cert.pem
openssl req -new -x509 -key cert.key -out cert.pem -days 1095


三、配置nginx.conf文件


server {
    listen                   443 default ssl;
    server_name             localhost;
    ssl                     on;
    ssl_certificate            /usr/local/nginx/conf/cert.pem;
    ssl_certificate_key        /usr/local/nginx/conf/cert.key;
    ssl_session_cache        shared:SSL:1m;
    ssl_session_timeout       5m;
ssl_protocols            SSLv3 TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers              HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;
    location / {
        root   html;
        index  index.html index.htm;
      }
}

https参数介绍:

listen:默认使用443端口,后面的ssl代表使用ssl方式,default可省略。
server_name:
服务器名称
ssl_certificate:
证书其实是个公钥,它会被发送到连接服务器的每个客户端,ssl_certificate_key私钥是用来解密的,所以它的权限要得到保护但nginx的主进程能够读取。当然私钥和证书可以放在一个证书文件中,这种方式也只有公钥证书才发送到client。
ssl_certificate_key:
私钥
ssl_session_cache:
设置ssl/tls会话缓存的类型和大小。如果设置了这个参数一般是shared,buildin可能会参数内存碎片,默认是none,和off差不多,停用缓存。如shared:SSL:10m表示所有的nginx工作进程共享ssl会话缓存,官网介绍说1M可以存放约4000个sessions。

ssl_session_timeout:客户端可以重用会话缓存中ssl参数的过期时间,内网系统默认5分钟太短了,可以设成30m即30分钟甚至4h。

ssl_protocols:指令用于启动特定的加密协议,nginx在1.1.13和1.0.12版本后默认是ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2,TLSv1.1与TLSv1.2要确保OpenSSL>= 1.0.1 ,SSLv3 现在还有很多地方在用但有不少被攻击的漏洞。

ssl_ciphers:选择加密套件,不同的浏览器所支持的套件(和顺序)可能会不同。这里指定的是OpenSSL库能够识别的写法,你可以通过 openssl -v cipher 'RC4:HIGH:!aNULL:!MD5'(后面是你所指定的套件加密算法) 来看所支持算法。
ssl_prefer_server_ciphers:

ssl_ciphers:选择加密套件,不同的浏览器所支持的套件(和顺序)可能会不同。这里指定的是OpenSSL库能够识别的写法,你可以通过 openssl -v cipher 'RC4:HIGH:!aNULL:!MD5'(后面是你所指定的套件加密算法) 来看所支持算法。
ssl_prefer_server_ciphers:
on,代表协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件。


四、效果



点击继续前往~~~


五、拓展


https服务器优化:
SSL操作需要消耗CPU资源,所以在多处理器的系统,需要启动多个工作进程,而且数量需要不少于可用CPU的个数。最消耗CPU资源的SSL操作是SSL握手,有两种方法可以将每个客户端的握手操作数量降到最低:第一种是保持客户端长连接,在一个SSL连接发送多个请求,第二种是在并发的连接或者后续的连接中重用SSL会话参数,这样可以避免SSL握手的操作。会话缓存用于保存SSL会话,这些缓存在工作进程间共享,可以使用ssl_session_cache指令进行配置。1M缓存可以存放大约4000个会话。默认的缓存超时是5分钟,可以使用ssl_session_timeout加大它。下面是一个针对4核系统的配置优化的例子,使用10M的共享会话缓存:



六、搭建心得


    There are a thousand Hamlets in a thousand people's eyes. 多查看相关的资料,每个人对于同一事物的见解是不同的,多对比着学习,站在巨人的肩膀上,你会看的更远。





  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值