2016年7月5日 星期二

如何產生 Elliptic Curve 數位憑證

  一般我們申請網站 HTTPS 數位憑證,最常見的公鑰加密演算法大多是 RSA 2048bit,最近公司的網站想做全網 HTTPS 加密 (由於 Google 強力推薦,未來的 HTTP/2 也是建構在 HTTPS 上),於是很好奇想看看那個早就全網 HTTPS 的 Facebook 臉書,到底是申請哪一家的憑證。

  於是開啟 Chrome 的開發人員工具  >  Security >  View Certificate,發現 Facebook 的加密演算法是「橢圓曲線加密法」ANSI X9.62 橢圓曲線 prime256v1 ,還真是與眾不同啊。




  在 Google 搜尋了一下「橢圓曲線密碼學」(簡稱 ECC),原來這種加密法的密鑰可以比 RSA 更小,但卻提供相同或更高等級的安全性,於是馬上二話不說就來試試如何產生跟 Facebook 一樣的數位憑證囉。

  我實做的主機是 CentOS 6.7 x86_64 ,openssl 版本是 1.0.1e (其實 CentOS 7 的 openssl 版本也一樣),用 man ecparam 可以看一下 ECC 的相關指令及參數用法。

1. 首先列出主機 openssl 支援的 ECC 演算法有哪些
指令:openssl ecparam -list_curves
secp384r1 : NIST/SECG curve over a 384 bit prime field
secp521r1 : NIST/SECG curve over a 521 bit prime field

prime256v1: X9.62/SECG curve over a 256 bit prime field

最左邊就是我們用來指定 ECC 演算法的 name

2. 產生 ECC 私鑰(就跟產生 RSA 私鑰是類似的)
指令:openssl ecparam -out www.example.com.key -name prime256v1 -genkey

這裡使用跟 Facebook 一樣的 prime256v1,當然你也可以試試另外 2 種演算法

3. 使用剛剛產生的 ECC 私鑰產生 CSR(憑證請求檔)
指令:openssl req -new -sha256 -key www.example.com.key -nodes -out www.example.com.csr

然後再用這個 CSR 去跟第三方 CA 業者申請憑證就可以了

  寫到這裡,各位有發現跟 RSA 不太一樣的地方嗎? 這個不同點就是: RSA 私鑰產生的時候會直接請你設定一個密碼來保護金鑰,但是剛剛產生的 ECC 私鑰按下 Enter 鍵就結束了,不需要設密碼!那麼如果我想要加上密碼保護 ECC 私鑰要怎麼做呢?

4. 為 ECC 私鑰加上密碼保護的方法,可以 man ec 看看相關參數
指令:openssl ec -in www.example.com.key -des3 -out www.example.com.key

沒有留言: