Etsy 如何用 Let's Encrypt 的 SSL certificate 做生意...

Etsy 的「How Etsy Manages HTTPS and SSL Certificates for Custom Domains on Pattern」這篇文章講了如何用 Let's Encrypt 實作 Custom Domain。

主要是因為 Let's Encrypt 在設計時就考慮到的 auto-renew 機制,可以全自動處理後續的動作。這使得接 Let's Encrypt 比起接其他家來得容易 (而且省掉許多費用與合約上要處理的問題)。

文章後半段則是討論另外一個問題:當你有上千把 private key (& certificate) 時要怎麼管理,以確保這些 private key 都夠安全。其中有提到未來打算要引入 HSM

One of our stretch goals is to look into deploying HSMs. If there are bugs in the underlying software, the integrity of the entire system could be compromised thus voiding any guarantees we try to keep. While bugs are inevitable, moving critical cryptographic functions into secure hardware will mitigate their impact.

由於不太可能是把所有的 private key 塞到 HSM 裡面,應該是用 HSM 管理加密後的 private key,可以想像一下整個系統又會多了好幾個元件將責任拆開...

Let's Encrypt 的 2016 年總結

算是 2015 正式被信任 (透過 IdenTrust) 後第一個完整的一年 (2016 整年):「Let’s Encrypt 2016 In Review」。

可以看到好幾波大型成長:

接下來的目標應該是 ECDSA Intermediates (「Upcoming Features」),不知道後續還會有什麼計畫...

英國通過法案要求 ISP 記錄使用者觀看過的網站

英國前幾天通過了最激烈的隱私侵犯法案,要求 ISP 必須記錄使用者觀看過的網站:「Britain has passed the 'most extreme surveillance law ever passed in a democracy'」:

The law forces UK internet providers to store browsing histories -- including domains visited -- for one year, in case of police investigations.

不愧是 George Orwell 生前的國家,居然先實現了他的理想國... 接下來 Let's EncryptTor 的重要性就更高了。

Let's Encrypt 支援 IDN

Let's Encrypt 宣佈支援 IDN:「Introducing Internationalized Domain Name (IDN) Support」,這代表可以申請的範圍變得更廣了:

This means that our users around the world can now get free Let’s Encrypt certificates for domains containing characters outside of the ASCII set, which is built primarily for the English language.

在「Upcoming Features」可以看到下一步應該是 ECDSA Intermediates?

Let’s Encrypt only signs end-entity certificates with RSA intermediates. We will add the ability to have end-entity certs signed by an ECDSA intermediate.

不曉得之後還會有什麼功能...

另外一套用 shell script 寫的 ACME client (或者說 Let's Encrypt client)

acme.sh 是另外一套用 shell script 寫的 ACME client,由西安的 Neilpang 寫的。我也包成 Ubuntu PPA 了:「PPA for acme.sh」。

我建議的用法是先建立 /etc/acme.sh,把各種設定都放到這個目錄裡面,然後用這樣的指令執行:

$ sudo acme.sh --issue -d www.example.com -w /srv/www.example.com/webroot/ --home /etc/acme.sh/

不過 acme.sh 有個問題,沒有將檔案與目錄權限處理好... 我申請完後發現目錄是 drwxr-xr-x,而 key 是 -rwxr-xr-x,這樣會有安全性的問題,需要自己再修改。

letsencrypt.sh 改名為 dehydrated

Twitter 上被提醒 letsencrypt.sh 改名為 dehydrated 了:

在「renamed project to dehydrated and main script to dehydrated.sh」這邊可以看到對應的 commit。

原有的 letsencrypt.sh PPA 仍然會保留,但不會再更新 (維持 letsencrypt.sh 所發行的最後一個版本,0.3.0),要使用的人請使用 dehydrated PPA,目前是 0.3.1。

原先的設定要搬過去的話有不少要改:

  • /usr/sbin/letsencrypt.sh -> /usr/sbin/dehydrated (執行檔)
  • /etc/letsencrypt.sh/ -> /etc/dehydrated/ (設定檔與 cert & key 的目錄)
  • /var/www/letsencrypt/ -> /var/www/dehydrated/ (challenge 的目錄)

既然 cert & key 的目錄也換了,apachenginx 的設定也要記得換,我這邊還要多換 Postfix 的設定...

接下來要改對應的教學文件...

OpenBSD 將 ACME Client (Let's Encrypt Client) 納入系統

看到 OpenBSD 直接把 ACME 協定的 client 放進系統內,而 ACME 也就是 Let's Encrypt 所使用的協定:「Let's Encrypt client imported into -current」:

CVSROOT:	/cvs
Module name:	src
Changes by:	florian@cvs.openbsd.org	2016/08/31 16:01:42

Added files:
	usr.sbin/acme-client: ChangeLog Makefile acctproc.c base64.c 
	                      certproc.c chngproc.c dbg.c dnsproc.c 
	                      extern.h fileproc.c http.c http.h jsmn.c 
	                      jsmn.h json.c keyproc.c letskencrypt.1 
	                      main.c netproc.c revokeproc.c rsa.c rsa.h 
	                      sandbox-pledge.c util-pledge.c util.c 

Log message:
Import Kristaps' letskencrypt and call it acme-client in tree.
OK to get it in deraadt@ (and probably beck@)

At least deraadt@, beck@ and otto@ are fine with the name and the
disagreements stopped.

用的是 acme-client,先前叫做 letskencrypt,以 C 開發的 ACME client。

SSL/TLS 以及 PKI 的歷史 (加上各種風風雨雨)

Twitter 上看到 Let's Encrypt 轉了這則講 SSL/TLS 與 PKI 的時間線:「SSL/TLS and PKI History」。

這幾年的資料比較完整,看著這些時間線剛好可以拿來複習一下。

而 2013 年 Snowden 的事情也被放進去了,這使得這三年各種 SSL/TLS 化的進展急劇加速 (包括各種 HTTPS 的進展,甚至是郵件的 STARTTLS 加密等等),也因此推動了像是 Let's Encrypt 這樣更方便提供 SSL/TLS certificate 的組織成立。

更新 letsencrypt.sh 的 PPA

letsencrypt.sh 是個用 shell script 實作出來的 letsencrypt/acme client,可以對 Let's Encrypt 申請出 SSL certificate。相較於官方後來交接給 EFFCertbot,我還蠻推薦使用純粹只需要 shell script 的 letsencrypt.sh...

由於作者沒有發出新的 release tarball,加上目前最新的 release 的程式也已經無法使用,所以昨天花了點時間更新了 letsencrypt.sh 的 PPA,就弄了一個 0.2.0.20160822 (版本號碼大於目前的 release 版本的 0.2.0):「PPA for letsencrypt.sh」。

與 0.2.0 版相比有個 BC-break 的地方:新版的 config 改檔名了 (從 config.sh 變成 config),如果之前有設定的話要記得改:

$ cd /etc/letsencrypt.sh/
$ sudo mv config.sh config

也趁機把之前建立 source package 的 build.sh 改成可以吃 git hash 或是 tag name 的版本,這樣需要針對特定版本產生 source package 也簡單多了。

Let's Encrypt 的 Root CA 進入 Mozilla 的信任清單了

Let's Encrypt 的 Root CA 進 Mozilla 的 CA 清單了:「Let's Encrypt Root to be Trusted by Mozilla」,Mozilla 增加的 ticket 則可以在「Add ISRG Root X1 root certificate to NSS」這邊看到。

目前的信任路徑是透過 IdenTrust 簽出來的,也就是下面那條。而現在 Mozilla 的產品線多了一條信任的路徑 (綠色粗線):

其他的單位 (以及瀏覽器) 也有提出申請,還在稽核驗證:

We have also applied to the Microsoft, Apple, Google, Oracle and Blackberry root programs. We look forward to acceptance into these programs as well.

除了 Oracle 應該是指 Java 用到的那包,其他的應該都是包含自家的系統。