於是開啟 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
沒有留言:
張貼留言