天天看點

ECC+RSA雙證書解決方案

什麼是ECC

ECC是Elliptic Curves Cryptography的縮寫,意為橢圓曲線密碼編碼學。和RSA算法一樣,ECC算法也屬于公開密鑰算法。最初由Koblitz和Miller兩人于1985年提出,其數學基礎是利用橢圓曲線上的有理點構成Abel加法群上橢圓離散對數的計算困難性。

ECC算法的數學理論非常深奧和複雜,在工程應用中比較難于實作,但它的機關安全強度相對較高,它的破譯或求解難度基本上是指數級的,黑客很難用通常使用的暴力破解的方法來破解。RSA算法的特點之一是數學原理相對簡單,在工程應用中比較易于實作,但它的機關安全強度相對較低。是以,ECC算法的可以用較少的計算能力提供比RSA加密算法更高的安全強度,有效地解決了“提高安全強度必須增加密鑰長度”的工程實作問題。

與RSA算法相比,ECC算法擁有突出優勢:

1、更适合于移動網際網路: ECC加密算法的密鑰長度很短(256位),意味着占用更少的存儲空間,更低的CPU開銷和占用更少的帶寬。随着越來越多的使用者使用移動裝置來完成各種網上活動,ECC加密算法為移動網際網路安全提供更好的客戶體驗。

2、更好的安全性:ECC加密算法提供更強的保護,比目前的其他加密算法能更好的防止攻擊,使你的網站和基礎設施比用傳統的加密方法更安全,為移動網際網路安全提供更好的保障。

3、更好的性能: ECC加密算法需要較短的密鑰長度來提供更好的安全,例如,256位的ECC密鑰加密強度等同于3072位RSA密鑰的水準(目前普通使用的RSA密鑰長度是2048位)。其結果是你以更低的計算能力代價得到了更高的安全性。經國外有關權威機構測試,在Apache和IIS伺服器采用ECC算法,Web伺服器響應時間比RSA快十幾倍。

4、更大的IT投資回報:ECC可幫助保護您的基礎設施的投資,提供更高的安全性,并快速處理爆炸增長的移動裝置的安全連接配接。 ECC的密鑰長度增加速度比其他的加密方法都慢(一般按128位增長,而 RSA則是倍數增長,如:1024 -2048--4096),将延長您現有硬體的使用壽命,讓您的投資帶來更大的回報。

ECC加密算法的通用性不斷增強

ECC加密算法自1985年提出,因其工程應用中難度較高,到2005年才在各種作業系統中獲得廣泛支援,在全球安全市場需求的刺激下,ECC算法将逐漸取代RSA算法,成為主流加密算法。目前,全球各大CA都已經陸續開始為使用者簽發采用ECC加密算法的各種證書.ECC加密算法以後支援所有作業系統、所有浏覽器和各種移動終端,主要有:

Mozilla NSS 3.11以上版本支援

OpenSSL 1.0以上版本支援

微軟CryptoAPI Vista/Win7/Win8都支援

BouncyCastle 1.32以上版本支援

JSSE 6 以上版本支援

BSAFE 4.0 以上版本支援

各種版本的IE浏覽器、火狐浏覽器、谷歌浏覽器和蘋果浏覽器都支援

安卓系統(2.3以上版本)、蘋果IOS(5.0以上版本)、Window Phone(各種版本)都支援

Apache配置方法

首先将 ecc 證書和 rsa 證書的證書鍊合并, ecc 證書鍊在前, rsa在後, cat chain-ecc.crt chain-rsa.crt > chain-ecc-rsa.crt 打開apache安裝目錄下conf/extra目錄中的httpd-ssl.conf(或conf目錄中的ssl.conf)檔案

在配置檔案中的

<VirtualHost *:443>……</VirtualHost>

之間添加或編輯如下配置項

SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
#ECC 将 ecc 證書(不含證書鍊)和 ecc 證書的密鑰檔案放在前
SSLCertificateFile /etc/apache2/SSL2015/ecdsa.cert.crt 
SSLCertificateKeyFile /etc/SSL2015/certs/ecdsa.key 
#RSA  将 rsa 證書(不含證書鍊)和 rsa 證書的密鑰檔案放在後
SSLCertificateFile /etc/apache2/SSL2015/rsa.cert.crt 
SSLCertificateKeyFile /etc/apache2/SSL2015/rsa.cert.key 

#指定 ecc/rsa 合并後的證書鍊位置 
SSLcertificateChainFile /etc/apache2/SSL2015/chain-ecc-rsa.crt           
如果伺服器的 OpenSSL 版本已經為 1.0.2 以及更新的版本,則用以下方法,ecc 和 rsa 證書要包含證書鍊:
#ECC 指定 ecc 證書檔案位置(證書以及證書鍊合并為一個檔案為 ecdsa.cert.pem ) 
SSLCertificateFile /etc/apache2/SSL2015/ecdsa.cert.pem 
SSLCertificateKeyFile /etc/SSL2015/certs/ecdsa.key 

#RSA 指定 rsa 證書檔案位置(證書以及證書鍊合并為一個檔案為 rsa.cert.pem ) 
SSLCertificateFile /etc/apache2/SSL2015/rsa.cert.pem 
SSLCertificateKeyFile /etc/apache2/SSL2015/rsa.cert.key           

以上是指定證書的方式,各位根據 OpenSSL 的版本選擇對應的方式,當然這還沒完,下一步要直接指定證書加密方式,==確定 ecc 的加密方式要在 rsa 模式的前面,否則 ecc 證書沒法生效了。==

Nginx配置方法

nginx 最新的 mainline 版本已經支援了雙證書,推薦使用nginx 1.11.1版本,openssl 版本推薦使用1.0.2h版本。

修改nginx的配置檔案 nginx.conf 配置雙證書:
ssl_certificate ssl/ecc/server.pem;  
ssl_certificate_key ssl/ecc/server.key;  
ssl_certificate ssl/rsa/server.pem;  
ssl_certificate_key ssl/rsa/server.key;

ssl_ciphers ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!AESGCM;
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header Strict-Transport-Security "max-age=31536000";
error_page 497 https://$host$request_uri;

----           

繼續閱讀