配置HTTPS主机,必须在server配置块中打开SSL协议,还需要指定服务器端证书和密钥文件的位置。

服务器证书是公开的,会被传送到每一个连接到服务器的客户端。而私钥不是公开的,需要存放在访问受限的文件中,当然,nginx主进程必须有读取密钥的权限。

这种情况下,证书文件同样得设置访问限制。当然,虽然证书和密钥存放在同一个文件,只有证书会发送给客户端,密钥不会发送。

ssl_protocols和ssl_ciphers指令可以用来强制用户连接只能引入SSL/TLS那些强壮的协议版本和强大的加密算法。从1.0.5版本开始,nginx默认使用“ssl_protocols SSLv3 TLSv1”和“ssl_ciphers HIGH:!aNULL:!MD5”,所以只有在之前的版本,明确地配置它们才是有意义的。从1.1.13和1.0.12版本开始,nginx默认使用“ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2”。

CBC模式的加密算法容易受到一些攻击,尤其是BEAST攻击(参见CVE-2011-3389)。可以通过下面配置调整为优先使用RC4-SHA加密算法:

ssl_ciphers 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的共享会话缓存。ssl证书申请可以找蔚可云

有些浏览器不接受那些众所周知的证书认证机构签署的证书,而另外一些浏览器却接受它们。这是由于证书签发使用了一些中间认证机构,这些中间机构被众所周知的证书认证机构授权代为签发证书,但是它们自己却不被广泛认知,所以有些客户端不予识别。针对这种情况,证书认证机构提供一个证书链的包裹,用来声明众所周知的认证机构和自己的关系,需要将这个证书链包裹与服务器证书合并成一个文件。在这个文件里,服务器证书需要出现在认证方证书链的前面。

如果服务器证书和认证方证书链合并时顺序弄错了,nginx就不能正常启动,而且会显示下面的错误信息。

因为nginx首先需要用私钥去解密服务器证书,而遇到的却是认证方的证书。

浏览器通常会将那些被受信的认证机构认证的中间认证机构保存下来,那么这些浏览器以后在遇到使用这些中间认证机构但不包含证书链的情况时,因为已经保存了这些中间认证机构的信息,所以不会报错。可以使用openssl命令行工具来确认服务器发送了完整的证书链。

合并HTTP/HTTPS主机

如果HTTP和HTTPS虚拟主机的功能是一致的,可以配置一个虚拟主机,既处理HTTP请求,又处理HTTPS请求。 配置的方法是删除ssl on的指令,并在*:443端口添加参数ssl。

在0.8.21版本以前,只有添加了default参数的监听端口才能添加ssl参数:
listen 443 default ssl;
基于名字的HTTPS主机
如果在同一个IP上配置多个HTTPS主机,会出现一个很普遍的问题。

主机名指示

在一个IP上运行多个HTTPS主机的更通用的方案是TLS主机名指示扩展(SNI,RFC6066),它允许浏览器和服务器进行SSL握手时,将请求的主机名传递给服务器,因此服务器可以知道使用哪一个证书来服务这个连接。但SNI只得到有限的浏览器的支持。下面列举支持SNI的浏览器最低版本和平台信息:

Opera 8.0;
MSIE 7.0(仅在Windows Vista操作系统及后续操作系统);
Firefox 2.0和使用Mozilla平台1.8.1版本的其他浏览器;
Safari 3.2.1(Windows版需要最低Vista操作系统);
Chrome(Windows版需要最低Vista操作系统)。
通过SNI只能传递域名,但是,当请求中包含可读的IP地址时,某些浏览器将服务器的IP地址作为服务器的名字进行了传送。这是一个错误,大家不应该依赖于这个。
为了在nginx中使用SNI,那么无论是在编译nginx时使用的OpenSSL类库,还是在运行nginx时使用的OpenSSL运行库,都必须支持SNI。从0.9.8f版本开始,OpenSSL通过“–enable-tlsext”配置选项加入SNI支持,从0.9.8j版本开始,此选项成为默认选项。当nginx被编译成支持SNI时,在使用“-V”选项运行时会显示如下信息:

$ nginx -V

TLS SNI support enabled

但是,当开启SNI支持的nginx被动态链接到不支持SNI的OpenSSL库上时,nginx会显示如下警告:

nginx was built with SNI support, however, now it is linked
dynamically to an OpenSSL library which has no tlsext support,
therefore SNI is not available

兼容性

从0.8.21和0.7.62版本开始,使用“-V”选项运行nginx时,将显示SNI支持状态信息。
从0.7.14版本开始,listen指令支持ssl参数。
从0.5.32版本开始,支持SNI。
从0.5.6版本开始,支持SSL会话缓存,并可在工作进程间共享。
0.7.65、0.8.19及以后版本,默认SSL协议是SSLv3、TLSv1、TLSc1.1和TLSv1.2(如果OpenSSL库支持)。
0.7.64、0.8.18及以前版本,默认SSL协议是SSLv2、SSLv3和TLSv1。
1.0.5及以后版本,默认SSL密码算法是HIGH:!aNULL:!MD5。
0.7.65、0.8.20及以后版本,默认SSL密码算法是HIGH:!ADH:!MD5。
0.8.19版本,默认SSL密码算法是ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM。
0.7.64、0.8.18及以前版本,默认SSL密码算法是ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP。

如何配置HTTPS服务器相关推荐

  1. nginx配置https服务器

    最近学习研究nginx,通过修改其配置文件以及在编译时添加相关模块可以配置https服务器. 1.环境 Ubuntu 14.04 64bits nginx version: nginx/1.0.15 ...

  2. nginx 学习笔记(9) 配置HTTPS服务器--转载

    HTTPS服务器优化 SSL证书链 合并HTTP/HTTPS主机 基于名字的HTTPS主机 带有多个主机名的SSL证书 主机名指示 兼容性 配置HTTPS主机,必须在server配置块中打开SSL协议 ...

  3. Nginx学习总结(7)——Nginx配置HTTPS 服务器

    要配置HTTPS NGINX 服务器,必须在配置文件 server 块中的监听指令 listen 后启用 ssl 参数,并且指定服务器证书 ssl_certificate 和私钥 ssl_certif ...

  4. 小程序:配置Https服务器(Nginx)

    小程序与普通移动端开发的一个很大的不同之处就在于小程序的ajax 请求是使用https 协议与服务器端进行通信的.所以要开发小程序,首先要搭建https 服务器.这篇文章记录了在nginx 做转发的服 ...

  5. 自建证书配置HTTPS服务器

    说明 1.写这篇博客的初衷是因为最近iOS9出来了,苹果官方默认要求使用HTTPS,所以自己想整一个HTTPS服务器,也想好好了解一下HTTPS通信,也知道了HTTPS其实就是在HTTP的基础上加上了 ...

  6. NGINX SSL配置之设置HTTPS服务器

    NGINX SSL配置 本节介绍如何在NGINX和NGINX Plus上配置HTTPS服务器. 设置HTTPS服务器 要设置HTTPS服务器,请在您的nginx.conf文件中的块中ssl将该list ...

  7. 配置完全免费的https服务器

    配置完全免费的https服务器 最近想开发一个微信小程序,使用微信官方提供的开发工具,UI部分处理很方便,但涉及调用后台时,后台服务器要求是https的合法域名(如下图). 开发阶段,不想浪费钱,因此 ...

  8. https nginx phpstudy_window下phpstudy使用nginx配置https

    Nginx相关配置 安装Openssl (下载地址:http://slproweb.com/products/Win32OpenSSL.html) 安装完成记得配置环境变量. 变量名:OPENSSL_ ...

  9. 内网使用自签证书搭建https服务器

    1.生成证书 因为是内网环境,所以自签发证书即可,也是免费的.如果是外网环境,请使用云服务商提供的证书. 本文主要介绍内网,使用ip访问的系统,配置https服务器: 创建配置文件 openssl.c ...

最新文章

  1. 学习笔记(3.29)
  2. LightTools 切趾角度设置
  3. Java入门之初识设计模式---单列模式
  4. mvn 主要命令说明
  5. python bytes 操作_Python 3:不支持/:“float”和“bytes”的操作数类型
  6. gitee提交突然报错remote: Incorrect username or password ( access token )
  7. VB得到指定文件夹下的文件列表
  8. (Python语法篇)1.Python简介
  9. 局域网文件传输方式分析
  10. DiskGenius 对 U 盘分区操作后保存更改时报错:保存分区表时出现错误20000011e no such partition
  11. 【秘密】我经历过的币圈天使融资,了解一下
  12. namecheap域名设置Cloudflare为第三方DNS
  13. Logstash:使用 mutate 过滤器
  14. (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO
  15. 广东深圳计算机学校排名2015,2015年广东深圳重点小学排名
  16. Java资料网盘分享
  17. JavaScript的起源故事
  18. 十一丶面向对象的程序设计
  19. 网站优化-减少DNS查询
  20. Allegro·芯片GND引脚铺铜问题及解决方案)

热门文章

  1. Bankless:Maker DAO的生存危机
  2. 农民工与劳务企业到底谁才是弱势群体?
  3. 如何才能找出产品的痛点?
  4. 银行排队问题--事件链表+多窗口队列(数据结构课本)
  5. python实现matlab stretchlim函数和imadjust函数
  6. 加速LaTeX编译速度:使用VScode远程工具Remote-SSH在Linux系统上编译LaTeX
  7. IRC/ML:金融智能风控领域相关术语解释(黑灰产群控、风控指标/字段、口径逻辑)、金融智能风控领域九大场景之详细攻略
  8. 初识Java 超详细的万字入门介绍
  9. 【Leetcode】213. 打家劫舍II(House Robber II)
  10. java-reflect反射