关于启用,的一些经验分享

关于启用 HTTPS 的片段经历分享

2015/12/04 · 基础技术关于启用,的一些经验分享。 ·
HTTP,
HTTPS

原文出处:
imququ(@屈光宇)   

乘势境内网络环境的穿梭恶化,各类篡改和绑架司空眼惯,越多的网站选用了全站
HTTPS。就在前些天,免费提供证件服务的 Let’s
Encrypt 项目也正式开放,HTTPS 很快就会成为
WEB 必选项。HTTPS 通过 TLS
层和讲明机制提供了情节加密、身份认证和数据完整性三大成效,可以使得避免数据被翻开或歪曲,以及防备中间人伪造。本文分享部分启用
HTTPS 进程中的经验,重点是何等与部分新出的安全标准协作使用。至于 HTTPS
的配备及优化,此前写过无数,本文不重复了。

关于启用 HTTPS 的有的经历分享(二)

2015/12/24 · 基本功技术 ·
HTTP,
HTTPS

原稿出处:
imququ(@屈光宇)   

小说目录

  • SSL 版本接纳
  • 加密套件选用
  • SNI 扩展
  • 申明采用

几天前,一位朋友问我:都说推荐用 Qualys SSL
Labs 这些工具测试 SSL
安全性,为啥有些安全实力很强的大厂家评分也很低?我觉着这一个标题应有从两地点来看:1)国内用户终端意况复杂,很多时候降落
SSL 安全安排是为着合作越来越多用户;2)确实有一对大厂家的 SSL
配置很不标准,尤其是安顿了一些斐然不应该使用的 CipherSuite。

自己事先写的《至于启用 HTTPS
的一部分经验分享(一)》,紧要介绍 HTTPS
如何与部分新出的平安标准合作使用,面向的是当代浏览器。而前几天那篇小说,越多的是介绍启用
HTTPS 进度中在老旧浏览器下可能遇到的难点,以及哪些抉择。

背景

近期为了扛 DDoS
攻击,从活动公司申请了一台服务器,移动公司免费提供流量清洗成效。但鉴于尚未备案,移动公司分裂意开展
80 端口。

实际上是因为GitLab只担负监听本地socket文件,而web服务器采纳了Nginx等。只需求在web
server上做适合的安顿即可。

理解 Mixed Content

HTTPS 网页中加载的 HTTP 资源被称为 Mixed
Content(混合内容),分歧浏览器对 Mixed Content 有差其他拍卖规则。

SSL 版本选取

TLS(Transport Layer Security,传输层安全)的前身是 SSL(Secure Sockets
Layer,避孕套接字层),它最初的多少个版本(SSL 1.0、SSL 2.0、SSL
3.0)由网景集团开发,从 3.1 早先被 IETF 标准化并更名,发展至今已经有 TLS
1.0、TLS 1.1、TLS 1.2 多个本子。TLS 1.3 改动会比较大,近年来还在草案阶段。

SSL 1.0 从未公开过,而 SSL 2.0 和 SSL 3.0
都留存安全题材,不引进应用。Nginx 从 1.9.1 初阶默许只帮忙 TLS
的多个版本,以下是 Nginx
合法文档中对
ssl_protocols 配置的表达:

Syntax: ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1]
[TLSv1.2];
Default: ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
Context: http, server
Enables the specified protocols. The TLSv1.1 and TLSv1.2 parameters
work only when the OpenSSL library of version 1.0.1 or higher is used.

但不幸的是,IE 6 只接济 SSLv2 和
SSLv3(来源),也就是说
HTTPS 网站要协助 IE 6,就非得启用 SSLv3。仅这一项就会造成 SSL Labs
给出的评分降为 C。

目标

为了赶紧启用那台担负着负载均衡和反向代理(其实远非负载均衡)的服务器,我布置选择https 协议,利用 443 端口从而避开 80
端口为客户提供健康服务。同时通过运用 https 协议,使得网站访问进一步安全。

上面是一个拔取Nginx的例子,对GitLab安装指南下载的gitlab脚本文件做了适度的修改。

早期的 IE

早期的 IE 在发现 Mixed Content
请求时,会弹出「是还是不是只查看安全传送的网页内容?」那样一个模态对话框,一旦用户选用「是」,所有
Mixed Content 资源都不会加载;选取「否」,所有资源都加载。

加密套件选拔

加密套件(CipherSuite),是在 SSL
握手中要求商谈的很重大的一个参数。客户端会在 Client Hello
中带上它所支撑的 CipherSuite 列表,服务端会从中选定一个并通过
Server Hello 重回。如若客户端辅助的 CipherSuite 列表与服务端配置的
CipherSuite 列表没有交集,会导致力不从心成功商事,握手败北。

CipherSuite
包涵多种技能,例如认证算法(Authentication)、加密算法(Encryption)、新闻认证码算法(Message
Authentication Code,简称为 MAC)、密钥沟通算法(Key
Exchange)和密钥衍生算法(Key Derivation Function)。

SSL 的 CipherSuite 协商机制具有良好的扩充性,每个 CipherSuite 都亟需在
IANA 注册,并被分配四个字节的标志。全体 CipherSuite 可以在 IANA 的 TLS
Cipher Suite
Registry
页面查看。

OpenSSL 库帮忙的全套 CipherSuite 可以由此以下命令查看:

openssl ciphers -V | column -t 0xCC,0x14 – ECDHE-ECDSA-CHACHA20-POLY1305
TLSv1.2 Kx=ECDH Au=ECDSA Enc=ChaCha20-Poly1305 Mac=AEAD … …

1
2
3
openssl ciphers -V | column -t
0xCC,0x14  –  ECDHE-ECDSA-CHACHA20-POLY1305  TLSv1.2  Kx=ECDH        Au=ECDSA   Enc=ChaCha20-Poly1305  Mac=AEAD
… …

0xCC,0x14 是 CipherSuite 的号子,在 SSL
握手中会用到。ECDHE-ECDSA-CHACHA20-POLY1305
是它的名号,之后几有些各自表示:用于 TLSv1.2,使用 ECDH 做密钥交流,使用
ECDSA 做验证,使用 ChaCha20-Poly1305 做对称加密,由于 ChaCha20-Poly1305
是一种 AEAD 情势,不须求 MAC 算法,所以 MAC 列显示为 AEAD。

要打听 CipherSuite 的越多内容,可以阅读那篇长文《TLS 合计分析 与
现代加密通讯协议设计》。不问可知,在配备
CipherSuite 时,请务必参考权威文档,如:Mozilla
的引进配置、CloudFlare
使用的部署。

如上 Mozilla 文档中的「Old backward compatibility」配置,以及 CloudFlare
的布置,都足以很好的非常老旧浏览器,包罗 Windows XP / IE6。

事先看到某个大厂家甚至辅助包罗 EXPORT
CipherSuite,这几个套件在上世纪由于米利坚讲话限制而被弱化过,已被夺回,实在没有理由再采用。

步骤

# GITLAB
# Maintainer: @randx
# App Version: 4.0

相比较新的 IE

正如新的 IE
将模态对话框改为页面尾部的提醒条,没有事先那么干扰用户。而且默许会加载图片类
Mixed Content,其余如 JavaScript、CSS
等资源如故会依照用户挑选来控制是不是加载。

SNI 扩展

咱俩领略,在 Nginx 中可以通过点名区其他 server_name
来配置七个站点。HTTP/1.1 协议请求头中的 Host
字段可以标识出当下恳请属于哪个站点。但是对于 HTTPS 网站来说,要想发送
HTTP 数据,必须等待 SSL
握手落成,而在握手阶段服务端就亟须提供网站证书。对于在同一个 IP 计划不相同HTTPS 站点,并且还采取了分歧证书的景况下,服务端怎么通晓该发送哪个证书?

Server Name Indication,简称为 SNI,是 TLS
的一个伸张,为化解那么些难点应运而生。有了 SNI,服务端可以因而
Client Hello 中的 SNI 扩大拿到用户要拜访网站的 Server
Name,进而发送与之合作的证件,顺遂达成 SSL 握手。

Nginx 在很早以前就帮忙了 SNI,能够因而 nginx -V
来验证。以下是自家的证实结果:

./nginx -V nginx version: nginx/1.9.9 built by gcc 4.8.4 (Ubuntu
4.8.4-2ubuntu1~14.04) built with OpenSSL 1.0.2e-dev xx XXX xxxx TLS SNI
support enabled configure arguments: –with-openssl=../openssl
–with-http_ssl_module –with-http_v2_module

1
2
3
4
5
6
./nginx -V
nginx version: nginx/1.9.9
built by gcc 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04)
built with OpenSSL 1.0.2e-dev xx XXX xxxx
TLS SNI support enabled
configure arguments: –with-openssl=../openssl –with-http_ssl_module –with-http_v2_module

唯独,并不是有着浏览器都援救 SNI,以下是常见浏览器支持 SNI 的最低版本:

浏览器 最低版本
Chrome Vista+ 全支持;XP 需要 Chrome 6+;OSX 10.5.7+ 且 Chrome 5+
Firefox 2.0+
Internet Explorer 7+ (需要 Vista+)
Safari 3+ (需要 OS X 10.5.6+)
Mobile Safari iOS 4.0+
Android Webview 3.0+

若是要幸免在不扶助 SNI 的浏览器中出现证书错误,只好将拔取分歧证书的
HTTPS 站点布局在分歧 IP 上,最简便的做法是分离安插到不一样机器上。

慎选证书颁发机构

有成百上千证书颁发机构,在此之前也选择过 StartSSL
的评释,但新兴被中国的商店收购了,因而一贯铲除。当前免费又火的证书颁发机构当属
Let’s encrypt 了,因而此次我也应用该机构的证件。

upstream gitlab {
  server unix:/home/gitlab/gitlab/tmp/sockets/gitlab.socket;
}

现代浏览器

现代浏览器(Chrome、Firefox、Safari、Microsoft Edge),基本上都遵从了
W3C 的 Mixed Content 规范,将
Mixed Content 分为Optionally-blockable 和 Blockable 两类:

Optionally-blockable 类 Mixed Content
包罗那么些危险较小,纵然被中间人歪曲也无大碍的资源。现代浏览器默许会加载这类资源,同时会在控制台打印警告音信。那类资源包含:

  • 通过 <img> 标签加载的图片(包含 SVG 图片);
  • 通过 <video> / <audio> 和 <source> 标签加载的视频或音频;
  • 预读的(Prefetched)资源;

除却所有的 Mixed Content
都是 Blockable,浏览器必须禁止加载这类资源。所以现代浏览器中,对于
HTTPS 页面中的 JavaScript、CSS 等 HTTP
资源,一律不加载,直接在控制台打印错误音信。

证书采纳

HTTPS 网站需求经过 CA
取得合法注脚,证书通过数字签名技术有限支撑第三方不可以伪造。证书的粗略原理如下:

  • 根据版本号、体系号、签名算法标识、发行者名称、有效期、证书主体名、证书主体公钥音讯、发行商唯一标识、主体唯一标识、增添生成
    TBSCertificate(To Be Signed Certificate, 待签名证书)新闻;
  • 签发数字签名:使用 HASH 函数对 TBSCertificate 总计得到信息摘要,用
    CA 的私钥对音讯摘要举行加密,得到签名;
  • 校验数字签名:使用同一的 HASH 函数对 TBSCertificate
    计算得到音讯摘要,与行使 CA 公钥解密签名获得内容相比较;

利用 SHA-1 做为 HASH 函数的注脚被喻为 SHA-1 证书,由于当下一度找到
SHA-1 的撞击标准,将证书换成选择更安全的 SHA-2 做为 HASH 函数的 SHA-2
证书被提上日程。

实则,微软已经宣称自 2017 年 1 月 1 日起,将通盘终止对 SHA-1
证书的支撑。届时在风靡版本的 Windows 系统中,SHA-1 证书将不被信任。

而据悉 Chrome
官方博客的文章,使用
SHA-1 证书且证书有效期在 2016 年 1 月 1 号至 2016 年 12 月 31
号之间的站点会被予以「安全的,但存在纰漏」的唤醒,也就是地址栏的小锁不再是蓝色的,并且会有一个艳情小三角。而采用SHA-1 证书且证书有效期超越 2017 年 1 月 1
号的站点会被给予「不安全」的革命警戒,小锁上平昔体现一个黑色的叉。

可是,并不是兼备的极限都协理 SHA-2
证书,服务端不扶助还好办,浏览器只好依靠于用户升高了。上边是常见浏览器帮助SHA-2 证书的最低版本:

浏览器 支持 SHA-2 证书的最低版本
Chrome 26+
Firefox 1.5+
Internet Explorer 6+ (需要 XP SP3+)
Safari 3+ (需要 OS X 10.5+)
Android Webview 2.3+

可以看来,若是要照看没有打 XP SP3 补丁的 IE6 用户,只好三番五次采用 SHA-1
证书。

在自己事先的小说中,还波及过 ECC
证书,那种新颖的讲明支持度更差,那里略过不提,有趣味的同桌可以点这里查看。

是或不是足以本着差异浏览器启用分裂证书吗?理论上服务端可以根据客户端
Client Hello 中的 Cipher Suites 特征以及是或不是协助 SNI
的表征来分配差异证书,可是我未曾实际验证过。

正文先写这么多,很多方针都须求根据自己网站的用户来决定,例如我的博客基本没有
IE8- 用户,理所当然可以禁用
SSLv3。假使您的制品还有不少应用老旧浏览器的用户,那就必须为那么些用户做合作方案了。一种方案是:只把主域安全级别配低,将
XP 上 IE 用户的 HTTPS 请求直接重定向到 HTTP
版本,那样任何域名可以应用高安全级其他配置,运维起来相比有利。

1 赞 1 收藏
评论

图片 1

设置正常的走访规则和本溪规则

  1. 安装应用服务器;
  2. 设置反向代理服务器;
  3. 设置域名解析;

server {
  listen 443;
  ssl                  on;
  ssl_certificate      /etc/nginx/sites-available/server.crt;
  ssl_certificate_key  /etc/nginx/sites-available/server.key;

挪动浏览器

后边所说都是桌面浏览器的作为,移动端情形比较复杂,当前多数活动浏览器默许都允许加载
Mixed Content。也就是说,对于移动浏览器来说,HTTPS 中的 HTTP
资源,无论是图片依然 JavaScript、CSS,默许都会加载。

相似选用了全站 HTTPS,就要避免出现 Mixed Content,页面所有资源请求都走
HTTPS 协议才能确保所有平台具有浏览器下都小难题。

安装应用服务器

  • 将拥有应用都安顿好;
  • 透过 PM2 集合的安排文件运行具有应用;
  • 应用服务器防火墙开放 8000 ~ 8999 区间的端口;
  • 安装安全组。入方向只允许持有 IP 地址访问 22 的 TCP
    端口,以及反向代理服务器的 IP 地址访问 8000 ~ 8999 的 TCP
    端口;出方向允许具备端口和商事;

  server_name localhost;
  #Ubuntu1204-dell
source.cml.com;    # e.g., server_name source.example.com;
  root /home/gitlab/gitlab/public;

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图