HTTPS已大面积普及,相关的技术也已经非常成熟。要明白OCSP装订是什么,首先要明白OCSP是个啥。OCSP(英文全称Online1Certificate Status1Protoco),即在线证书状态协议,是用来检验证书合法性的在线查询协议。

翻译成人话:网站的每个访问者都会进行OCSP查询。OCSP装订,可代替在线证书状态协议(OCSP)来查询证书的状态。那就可以优化 HTTPS 速度,因为大部分CA的OSCP服务器都不在中国大陆内

了解这一切,先从CRL说起
当用户通过HTTPS访问您的站点时,服务器需要将您站点的TLS证书响应给用户。用户浏览器会检查证书的到期时间,并拒绝任何已过期/已无效的证书。

在某些情况下,服务器拥有者因为私钥泄漏,必须将证书标记为无效,此时就依赖证书颁发机构实施至少一种方法来吊销有问题的证书并通知浏览器拒绝这些已被吊销的证书。

CRL(英文全称Certificate Revocation List),即证书吊销列表,是 PKI 系统中的一个结构化数据文件,该文件包含了证书颁发机构已经吊销的证书的序列号及其吊销日期。用户在访问您的站点前,浏览器会先下载并解析CRL文件,而后通过CRL文件校验您的证书是否已经吊销。

随着HTTPS的普及,已发布的CRL文件越来越大,这无疑加大了每次链接的网络开销,CRL无法很好的扩展表现的越来越明显。

OCSP验证网站服务器的证书是否有效
OCSP(英文全称Online1Certificate Status1Protoco),即在线证书状态协议,是用来检验证书合法性的在线查询协议。当用户通过HTTPS访问您的网站的时候,客户浏览器会通过OCSP响应者验证网站服务器的证书是否有效。(浏览器现在可以与响应者联系,以请求CA颁发的单个证书的吊销状态,而不必获取和处理整个CRL。)

OCSP看起来似乎是一种有效的解决方案,但新协议已被证明存在实用性问题。

性能问题,浏览器需要为每个新的HTTPS连接执行附加的HTTP请求,增加了网络开销;
安全问题,大多数实际的OCSP实施不够可靠(由于网络滞后,配置或应用程序错误),导致用户浏览器实施OCSP检查失败。如果无法访问OCSP服务器或服务器超时,浏览器将认为证书有效并继续进行HTTPS连接;
隐私问题,由于证书与密钥和域名相关联,并且浏览器在每个新的HTTPS连接之前请求吊销状态,这意味着浏览器会将其用户的网络历史的很大一部分泄漏给OCSP响应者。
OCSP装订是TLS证书状态查询扩展
OCSP装订 (OCSP Stapling)作为对OCSP协议缺陷的弥补,实现了服务器可以事先模拟浏览器对证书链进行验证,并将带有CA机构签名的OCSP验证结果响应保存到本地,最多可缓存7天。等到真正的握手阶段,再将OCSP响应和证书链一起下发给浏览器,以此避免增加浏览器的握手延时。由于浏览器不需要直接向 CA 站点查询证书状态,这个功能对访问速度的提升非常明显。

由于装订是在服务器中实现的,因此浏览器无法知道服务器是否真正支持装订,而且OCSP装订本身不能完全解决OCSP的软故障安全问题。

结果,具有持有被盗证书私钥的攻击者可以通过提供证书而无需OCSP装订来执行降级攻击。受害者的浏览器无法证实服务器是否真正支持装订,并无法像通常那样继续查询OCSP响应程序。然后,攻击者可以简单地阻止此OCSP查询,并有效地迫使浏览器接受证书有效。

OCSP必须装订(英文全称OCSP Must-Staple),即CA和浏览器供应商引入的防止OCSP装订被攻击的SSL证书扩展,该扩展要求必须对证书进行OCSP装订。如果浏览器遇到带有此扩展名的证书而未使用OCSP装订,则将被拒绝。

OCSP必须装订可以缓解上述降级攻击,还可以减少流向CA的OCSP响应程序的不必要的流量,这也帮组提高了OCSP的整体性能。

如何开启OCSP装订 (OCSP Stapling)

1、登录到宝塔面板后台 http://服务器IP:8888

2、点击“网站”,选择你要安装SSL证书的网站(跟申请证书时一致的域名),点击“设置”,如下图所示:

3、GoGetSSL SSL证书安装方法

选择“SSL”选项卡,找到“当前证书”,将对应内容粘贴到“密钥(KEY)”和“证书(PEM格式)”两个框内,然后点击“保存”,如下图所示:

4、Sectigo SSL证书安装方法

下载证书后,打开压缩包里的Nginx文件夹,将后缀.key的文件双击打开(或记事本方式打开),将里面的内容复制粘贴到“密钥(KEY)”框内;后缀.pem的文件双击打开(或记事本方式打开),将里面第一,第二段的内容复制粘贴到“证书(PEM格式)”框内,如下图:

宝塔提供"强制HTTPS"的选项,如需可以开启强制HTTPS功能,大家按需选择即可。
至此,宝塔面板网站安装SSL证书启用HTTPS方法结束。

PS: 阿里云,腾讯云服务器需要去服务器控制面板开放443端口。

什么是HSTS

HSTS(HTTP Strict Transport Security)国际互联网工程组织IETE正在推行一种新的Web安全协议,作用是强制客户端(如浏览器)使用HTTPS与服务器创建连接。

主要目的是为了解决HTTPS网站首次请求时使用的是未加密的HTTP协议,也就说用户一般访问我们的网站都是直接在浏览器输入域名,比如morong.me,然后我们的服务器检测到是HTTP请求,就301跳转到HTTPS页面。那么前半程采用的就是未加密的HTTP请求,同样存在被劫持的可能,那么HTTPS说好的安全性也就大打折扣了!

开启HSTS

开启HSTS很简单,只要在我们网站的响应头里面新增HSTS即可,下面简单说下

1、Nginx服务器

找到nginx.conf配置文件,在网站的server配置代码里面加入如下代码:

server {
listen xx.xx.xx.xx:443 ssl spdy;
server_name www.gworg.com;
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains"; #加入此行代码

……

}

2、Apache服务器

LoadModule headers_module modules/mod_headers.so

Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"

3、Lighttpd

server.modules += ( "mod_setenv" )
$HTTP["scheme"] == "https" {
setenv.add-response-header = ( "Strict-Transport-Security" => "max-age=63072000; includeSubdomains; preload")
}

4、通用方法

如果你用的虚拟主机,或者不会折腾WEB软件,那么可以采用更简单的通用方法。原理很简单,通过代码来新增响应头即可,这里只分享一下php的做法,其他语言自行参考:

将如下代码插入到网站根目录的index.php即可:

header("Strict-Transport-Security: max-age=63072000; includeSubdomains; preload");

篇尾语:HSTS有利有弊,启用了的网站如果后期想http访问需要一段时间才可以恢复,另外目前不是所有的浏览器都支持HSTS,所以对于想使用这种方法强制跳转https的用户可以综合考虑下。

一般来说,主流的 Web 服务软件,通常都基于 OpenSSL 和 Java 两种基础密码库。

Tomcat、Weblogic、JBoss 等 Web 服务软件,一般使用 Java 提供的密码库。通过 Java Development Kit (JDK)工具包中的 Keytool 工具,生成 Java Keystore(JKS)格式的证书文件。
Apache、Nginx 等 Web 服务软件,一般使用 OpenSSL 工具提供的密码库,生成 PEM、KEY、CRT 等格式的证书文件。
IBM 的 Web 服务产品,如 Websphere、IBM Http Server(IHS)等,一般使用 IBM 产品自带的 iKeyman 工具,生成 KDB 格式的证书文件。
微软 Windows Server 中的 Internet Information Services(IIS)服务,使用 Windows 自带的证书库生成 PFX 格式的证书文件。
判断证书文件是文本格式还是二进制格式

.DER 或 .CER 文件: 这样的证书文件是二进制格式,只含有证书信息,不包含私钥。
.CRT 文件: 这样的证书文件可以是二进制格式,也可以是文本格式,一般均为文本格式,功能与 .DER 及 *.CER 证书文件相同。
.PEM 文件: 这样的证书文件一般是文本格式,可以存放证书或私钥,或者两者都包含。 .PEM 文件如果只包含私钥,一般用 *.KEY 文件代替。
.PFX 或 .P12 文件: 这样的证书文件是二进制格式,同时包含证书和私钥,且一般有密码保护。

不同服务器部署证书需要不同格式的SSL证书,根据当下常见服务器环境, 为您提供方便快捷的证书格式转换,支持PEM、P12、JKS。

证书格式转换工具:https://myssl.com/cert_convert_wasm.html

阿里云安全组开放端口
阿里云安全组类似虚拟防火墙,默认只开放了22和3389端口

在阿里云服务器ECS控制台
左侧栏选择“实例”,找到需要开放端口的云服务器ECS实例,如果没有,记得切换左上角地域。

点“更多”–“网路和安全组”–“安全组配置”

在“配置规则”中,按照下图开放443端口
如下图:

端口号以开放443端口为例,在安全组规则的“入方向”,点击“手动添加”,规则如下:

端口范围目的:443/443
授权对象源:0.0.0.0/0
授权对象0.0.0.0/0是指授权给所有IP。上述规则的意思是,将云服务器8888端口,授权给所有IP使用。出于安全考虑,授权对象也可以填写IP段或者固定IP地址。

关于安全组参考文档:https://help.aliyun.com/document_detail/25471.html

SSL证书 SSL证书购买 SSL证书申请 SSL证书价格 泛域名证书 通配符证书 通配符SSL证书 https证书 便宜SSL证书 便宜证书 SSL证书多少钱 申请SSL 域名SSL sectigo证书