<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>HTTPS on Eason Yang&#39;s Blog</title>
    <link>https://easonyang.com/tags/https/</link>
    <description>Recent content in HTTPS on Eason Yang&#39;s Blog</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Wed, 16 May 2018 12:53:24 +0000</lastBuildDate>
    <atom:link href="https://easonyang.com/tags/https/atom.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>同学，Let&#39;s Encrypt的wildcard证书了解下</title>
      <link>https://easonyang.com/2018/05/16/letsencrypt-wildcard/</link>
      <pubDate>Wed, 16 May 2018 12:53:24 +0000</pubDate>
      <guid>https://easonyang.com/2018/05/16/letsencrypt-wildcard/</guid>
      <description>&lt;h2 id=&#34;背景&#34;&gt;背景&lt;/h2&gt;&#xA;&lt;p&gt;去年看到 Let&amp;rsquo;s Encrypt 宣布将在 2018 年支持 wildcard SSL 证书的消息时就一阵兴奋，虽然后来跳票了一次，但最终还是于前段时间正式支持了。本文将使用 acme.sh 这个小工具来体验下此项特性。&lt;/p&gt;</description>
    </item>
    <item>
      <title>SSL证书的格式与扩展名</title>
      <link>https://easonyang.com/2017/03/20/format-and-suffix-of-ssl-certification/</link>
      <pubDate>Mon, 20 Mar 2017 00:10:59 +0000</pubDate>
      <guid>https://easonyang.com/2017/03/20/format-and-suffix-of-ssl-certification/</guid>
      <description>&lt;h2 id=&#34;编码格式&#34;&gt;编码格式&lt;/h2&gt;&#xA;&lt;h3 id=&#34;pem&#34;&gt;PEM&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;内容：以 &lt;code&gt;-----BEGIN xxx-----&lt;/code&gt; 作为开头，以 &lt;code&gt;-----END xxx-----&lt;/code&gt; 作为结尾，主体部分使用 base64 对 ACII 进行编码。可以储存公钥证书（服务器证书及中检证书，「xxx」为 「CERTIFICATE」）和私钥（「xxx」为「RSA等加密算法名称 PRIVATE KEY」），也可以储存两者的联合，但通常情况下，Apache 等软件都会要求将公钥和私钥分开存储到不同的文件。&lt;/li&gt;&#xA;&lt;li&gt;场景：*NIX 操作系统下普遍倾向于使用这一编码格式。&lt;/li&gt;&#xA;&lt;li&gt;扩展名：&lt;code&gt;.pem&lt;/code&gt; 、&lt;code&gt;.key&lt;/code&gt; 、&lt;code&gt;.csr&lt;/code&gt; 、&lt;code&gt;.cer&lt;/code&gt; 、&lt;code&gt;.crt&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;生成：&lt;code&gt;openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365&lt;/code&gt; 扩展名参照上文&lt;/li&gt;&#xA;&lt;li&gt;查看：&lt;code&gt;openssl x509 -in certificate.pem -text -noout&lt;/code&gt; 扩展名参照上文&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;der&#34;&gt;DER&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;内容：由0、1组成的二进制数据，可以储存任何类型的公钥证书和私钥，不可读。&lt;/li&gt;&#xA;&lt;li&gt;使用场景：Windows 系统 及 Java 平台倾向于使用这一编码格式。&lt;/li&gt;&#xA;&lt;li&gt;扩展名：&lt;code&gt;.der&lt;/code&gt; 、&lt;code&gt;.key&lt;/code&gt; 、&lt;code&gt;.csr&lt;/code&gt; 、&lt;code&gt;.cer&lt;/code&gt; 、&lt;code&gt;.crt&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;生成：&lt;code&gt;openssl req -x509 -newkey rsa:4096 -keyout key.der -outform der -out cert.der -days 365&lt;/code&gt; 扩展名参照上文&lt;/li&gt;&#xA;&lt;li&gt;查看：&lt;code&gt;openssl x509 -in certificate.der -inform der -text -noout&lt;/code&gt; 扩展名参照上文&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;扩展名总结&#34;&gt;扩展名总结&lt;/h2&gt;</description>
    </item>
    <item>
      <title>启用OCSP Stapling</title>
      <link>https://easonyang.com/2017/03/19/enable-ocsp-stapling/</link>
      <pubDate>Sun, 19 Mar 2017 18:37:00 +0000</pubDate>
      <guid>https://easonyang.com/2017/03/19/enable-ocsp-stapling/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;尽管相对于 HTTP ，HTTPS 在安全性上已经有了质的飞跃，然而简单的设置 HTTPS 仍无法避免类似于中间人攻击这样的恶意行为，而本文所要介绍的 OCSP Stapling 和 下篇文章将要介绍的 Certification Transparency 就是用来防范这些恶意行为的。&lt;/p&gt;&#xA;&lt;h2 id=&#34;什么是-ocsp-stapling&#34;&gt;什么是 OCSP Stapling&lt;/h2&gt;&#xA;&lt;p&gt;OCSP (Online Certificate Status Protocol) 通常由 CA 提供，用于在线实时验证证书是否合法有效，这样客户端就可以根据证书中的 OCSP 信息，发送查询请求到 CA 的验证地址，来检查此证书是否有效。&lt;/p&gt;&#xA;&lt;p&gt;然而这些默认查询 OCSP 的客户端在获得查询结果的响应前势必会一直阻塞后续的事件，在网络情况堪忧的情况下（尤其是大陆地区）会造成较长时间的页面空白。&lt;/p&gt;&#xA;&lt;p&gt;而 OCSP Stapling ，顾名思义，是将查询 OCSP 接口的工作交给服务器来做，服务器除了可以直接查询 OCSP 信息，还可以仅进行少数次查询并将响应缓存起来。当有客户端向服务器发起 TLS 握手请求时，服务器将证书的 OCSP 信息随证书链一同发送给客户端，从而避免了客户端验证会产生的阻塞问题。由于 OCSP 响应是无法伪造的，因此这一过程也不会产生额外的安全问题。&lt;/p&gt;</description>
    </item>
    <item>
      <title>为Nginx启用Brotli压缩算法</title>
      <link>https://easonyang.com/2016/12/02/enable-brotli-for-nginx/</link>
      <pubDate>Fri, 02 Dec 2016 00:05:52 +0000</pubDate>
      <guid>https://easonyang.com/2016/12/02/enable-brotli-for-nginx/</guid>
      <description>&lt;h2 id=&#34;什么是-brotli-压缩算法&#34;&gt;什么是 Brotli 压缩算法&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Brotli最初发布于2015年，用于&lt;a href=&#34;https://zh.wikipedia.org/wiki/Web%E9%96%8B%E6%94%BE%E5%AD%97%E5%9E%8B%E6%A0%BC%E5%BC%8F&#34;&gt;网络字体&lt;/a&gt;的离线压缩。Google软件工程师在2015年9月发布了包含通用&lt;a href=&#34;https://zh.wikipedia.org/wiki/%E6%97%A0%E6%8D%9F%E6%95%B0%E6%8D%AE%E5%8E%8B%E7%BC%A9&#34;&gt;无损数据压缩&lt;/a&gt;的Brotli增强版本，特别侧重于&lt;a href=&#34;https://zh.wikipedia.org/wiki/HTTP%E5%8E%8B%E7%BC%A9&#34;&gt;HTTP压缩&lt;/a&gt;。其中的编码器被部分改写以提高压缩比，编码器和解码器都提高了速度，流式API已被改进，增加更多压缩质量级别。新版本还展现了跨平台的性能改进，以及减少解码所需的内存。&lt;/p&gt;&#xA;&lt;p&gt;与常见的通用压缩算法不同，Brotli使用一个预定义的120&lt;a href=&#34;https://zh.wikipedia.org/wiki/%E5%8D%83%E5%AD%97%E8%8A%82&#34;&gt;千字节&lt;/a&gt;字典。该字典包含超过13000个常用单词、短语和其他子字符串，这些来自一个文本和HTML文档的大型&lt;a href=&#34;https://zh.wikipedia.org/wiki/%E8%AF%AD%E6%96%99%E5%BA%93&#34;&gt;语料库&lt;/a&gt;。预定义的算法可以提升较小文件的压缩密度。&lt;/p&gt;&#xA;&lt;p&gt;使用brotli替换&lt;a href=&#34;https://zh.wikipedia.org/wiki/DEFLATE&#34;&gt;deflate&lt;/a&gt;来对&lt;a href=&#34;https://zh.wikipedia.org/wiki/%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6&#34;&gt;文本文件&lt;/a&gt;压缩通常可以增加20%的压缩密度，而压缩与解压缩速度则大致不变。使用Brotli进行流压缩的&lt;a href=&#34;https://zh.wikipedia.org/wiki/HTTP%E5%8E%8B%E7%BC%A9&#34;&gt;内容编码类型&lt;/a&gt;已被提议使用“br”。&lt;/p&gt;&#xA;&lt;p&gt;摘自：https://zh.wikipedia.org/wiki/Brotli&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;另附 Brotli 算法和其他算法的性能比较：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://cran.r-project.org/web/packages/brotli/vignettes/benchmarks.html&#34;&gt;https://cran.r-project.org/web/packages/brotli/vignettes/benchmarks.html&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://hacks.mozilla.org/2015/11/better-than-gzip-compression-with-brotli/&#34;&gt;https://hacks.mozilla.org/2015/11/better-than-gzip-compression-with-brotli/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;兼容性&#34;&gt;兼容性&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Google Chrome supported Brotli from version 49.&lt;/li&gt;&#xA;&lt;li&gt;Microsoft Edge has Brotli in Development.&lt;/li&gt;&#xA;&lt;li&gt;Mozilla Firefox implemented Brotli in version 44. &lt;/li&gt;&#xA;&lt;li&gt;Opera supports Brotli since version 36.&lt;/li&gt;&#xA;&lt;li&gt;Safari, no public commitment as of October 2016.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;摘自：https://en.wikipedia.org/wiki/Brotli&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;安装-brotli-所需模块&#34;&gt;安装 Brotli 所需模块&lt;/h2&gt;&#xA;&lt;h3 id=&#34;首先安装-bagderlibbrotlihttpsgithubcombagderlibbrotli&#34;&gt;首先安装 &lt;a href=&#34;https://github.com/bagder/libbrotli&#34;&gt;bagder/libbrotli&lt;/a&gt;&lt;/h3&gt;</description>
    </item>
    <item>
      <title>使腾讯404公益页面支持HTTPS</title>
      <link>https://easonyang.com/2016/08/06/set-tencent-lostchild-404-page-for-ssl/</link>
      <pubDate>Sat, 06 Aug 2016 22:55:08 +0000</pubDate>
      <guid>https://easonyang.com/2016/08/06/set-tencent-lostchild-404-page-for-ssl/</guid>
      <description>&lt;h2 id=&#34;更新&#34;&gt;更新：&lt;/h2&gt;&#xA;&lt;p&gt;经评论提醒，我才发现腾讯的 404 公益页面的数据源和页面样式已经有所更新。对于我们希望使其支持 HTTPS 的使用者而言，要做的也再不仅仅是简单的替换。&lt;/p&gt;&#xA;&lt;h3 id=&#34;替换-url&#34;&gt;替换 URL&lt;/h3&gt;&#xA;&lt;p&gt;除了需要把原来的 &lt;code&gt;qzonestyle.gtimg.cn/qzone_v6/lostchild&lt;/code&gt; 替换为 &lt;code&gt;qzone.qq.com/gy/404&lt;/code&gt; 外，还需要将 &lt;code&gt;page.js&lt;/code&gt; 中的众多 HTTP 开头的 URL 修改为 HTTPS。&lt;/p&gt;&#xA;&lt;p&gt;简单的替换之后，我们会发现从 data.js 中获取的图片地址仍然是一个 HTTP 链接，此时需要修改用来格式化数据的 &lt;code&gt;resolveData(d)&lt;/code&gt; 函数，在 for 循环中添加：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;child_pic&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;child_pic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;replace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;/^http/&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;https&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h3 id=&#34;设置返回按钮&#34;&gt;设置返回按钮&lt;/h3&gt;&#xA;&lt;p&gt;此外，我们可以在官网的说明页面中看到公益 404 更新之后提供了例如「返回首页」这样的实用功能，分析一下 page.js 的代码，不难发现其实现方法是遍历了所有 script 标签然后获取指定标签上的指定属性值，因此我们只要将 &lt;code&gt;homePageUrl&lt;/code&gt; 和 &lt;code&gt;homePageName&lt;/code&gt; 属性添加到我们自己指定的 data.js 的 script 标签（原代码中指定的是 search_children.js 的 script 标签）上即可。&lt;/p&gt;&#xA;&lt;h3 id=&#34;问题&#34;&gt;问题&lt;/h3&gt;&#xA;&lt;p&gt;在 &lt;code&gt;page.js&lt;/code&gt; 的原代码中，我看到了一个访问 &lt;code&gt;http://boss.qzone.qq.com/fcg-bin/fcg_zone_info&lt;/code&gt; 的请求，获取的数据似乎是访问者的某些信息，目前未发现这些数据对 404 页面有何影响，另一方面该网站也不支持 HTTPS 访问，因此本文选择将这个请求注释掉。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
