openssl完美前向安全(PFS)支持C++實現

在創建context之後,調用符合PFS規範的加密套件,加載完證書之後設置ECDH

// context 生成
Context context(SSL_CTX_new(SSLv23_server_method()));

// PFS加密套件,騰訊雲,各種檢測網站都有推薦
const char * cipher_list = "ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE";
int res = SSL_CTX_set_cipher_list(context.context, cipher_list);
if (res == 0) 
{
    printf("Failed to set cipher list: %s\n", cipher_list);
}
else
{
    printf("load cipher succ res: %d\n", res);
}

// TLSv1過濾,前向完全設置
SSL_CTX_set_options(context.context, SSL_OP_NO_TLSv1 | SSL_OP_CIPHER_SERVER_PREFERENCE);

// 加載證書代碼
SSL_CTX_load_verify_locations(context,"ca-certificates.crt證書路徑");
// SSL_CTX_use_certificate_chain_file
// SSL_CTX_use_PrivateKey_file

// 這一步很重要,設置臨時公鑰
EC_KEY *ecdh = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
if (!ecdh)
{
    printf("EC_KEY_new_by_curve_name\n");
}
SSL_CTX_set_options(context.context, SSL_OP_SINGLE_ECDH_USE);
SSL_CTX_set_tmp_ecdh (context.context, ecdh);   
EC_KEY_free(ecdh); 

// 參考代碼nginx源碼

一些概念:

TLS:傳輸層安全性協議(英語:Transport Layer Security,縮寫TLS),及其前身安全套接層(Secure Sockets Layer,縮寫作SSL)是一種安全協議,目的是爲互聯網通信提供安全及數據完整性保障。百度鏈接:https://baike.baidu.com/item/TLS/2979545?fr=aladdin

PFS:(perfect forward secrecy),中文可叫做完全前向保密。要求一個密鑰只能訪問由它所保護的數據;用來產生密鑰的元素一次一換,不能再產生其他的密鑰;一個密鑰被破解,並不影響其他密鑰的安全性。知乎科普:https://www.zhihu.com/question/45203206

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章