什麼是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;
----