C++ 为DHE exchange生成OpenSSL证书
我是安全和OpenSSL方面的初学者。我的目标是通过编程生成一个证书,通过Chrome的“过时”羞辱。我用来生成的证书使用了C++ 为DHE exchange生成OpenSSL证书,c++,openssl,x509,C++,Openssl,X509,我是安全和OpenSSL方面的初学者。我的目标是通过编程生成一个证书,通过Chrome的“过时”羞辱。我用来生成的证书使用了AES\u 128\u GCM和RSA,即使我尝试将密码列表设置为kEECDH:kEDH:!ADH:AES256-SHA256并且服务器上下文使用SSL_CTX_new(TLSv1_2_server_method()) 根据中的示例,我尝试了以下方法: X509 *x = NULL; EVP_PKEY *pk = NULL; EVP_PKEY_CTX *ctx = NULL
AES\u 128\u GCM
和RSA
,即使我尝试将密码列表设置为kEECDH:kEDH:!ADH:AES256-SHA256
并且服务器上下文使用SSL_CTX_new(TLSv1_2_server_method())代码>
根据中的示例,我尝试了以下方法:
X509 *x = NULL;
EVP_PKEY *pk = NULL;
EVP_PKEY_CTX *ctx = NULL;
EVP_PKEY *params = NULL;
if(NULL == (params = EVP_PKEY_new()))
goto err;
if(1 != EVP_PKEY_set1_DH(params, DH_get_2048_256()))
goto err;
if(!(ctx = EVP_PKEY_CTX_new(params, NULL)))
goto err;
if(!EVP_PKEY_keygen_init(ctx))
goto err;
if(!EVP_PKEY_keygen(ctx, &pk))
goto err;
if ((x=X509_new()) == NULL)
goto err;
X509_set_version(x,2);
X509_set_pubkey(x,pk);
//... (setting the issuer, subject, etc)
//Here is where it fails
if (!X509_sign(x,pk,EVP_sha256()))
goto err;
对于RSA
而不是DH
来说,同样的代码也可以工作。X509\u sign
给出的错误是此密钥类型不支持EVP\u PKEY\u sign\u init操作
我能做什么?我希望连接使用ECDHE
,但我不知道如何设置。我需要这是合理的安全,但我的安全知识是非常有限的。不过我正在努力。任何帮助都将不胜感激,但请在回答时提供代码(不是命令行生成)
我的目标是通过编程生成一个通过Chrome所做的“过时”羞辱的证书…
我能做什么?我希望连接使用ECDHE,但我不知道如何设置…
我尝试将密码列表设置为kEECDH:kEDH:!ADH:AES256-SHA256
通常,高:!阿努尔:!RC4:!MD5已经足够了。由于您希望使用临时密钥交换(这是一件好事),因此也应该删除RSA密钥传输:HIGH:!阿努尔:!克尔萨:!RC4:!MD5
根据文档中的示例
另请参见OpenSSL wiki上的。它是一个客户端,但它向您展示了如何设置上下文
因为它是一个服务器,所以您可能还需要上下文选项,如
为DHE exchange生成OpenSSL证书
几乎任何证书都可以。它可以是RSA密钥、DSS密钥或ECDSA密钥。证书中的密钥将用于对服务器消息进行签名(有些是免提的),因此它用于服务器身份验证
短暂的密钥交换是不同的。确保使用和密码套件字符串
因为您没有使用像SRP和PSK这样的密码套件,所以也可以删除它们。RSA仍会出现,但它用于服务器身份验证,而不是密钥传输:
$ openssl ciphers -v 'HIGH:!aNULL:!kRSA:!RC4:!MD5:!3DES:!DSS:!DSA:!SRP:!PSK'
ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(256) Mac=AEAD
ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(256) Mac=AEAD
ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA384
ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA384
ECDHE-RSA-AES256-SHA SSLv3 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA1
ECDHE-ECDSA-AES256-SHA SSLv3 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA1
DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(256) Mac=AEAD
DHE-RSA-AES256-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AES(256) Mac=SHA256
DHE-RSA-AES256-SHA SSLv3 Kx=DH Au=RSA Enc=AES(256) Mac=SHA1
DHE-RSA-CAMELLIA256-SHA SSLv3 Kx=DH Au=RSA Enc=Camellia(256) Mac=SHA1
ECDH-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH/RSA Au=ECDH Enc=AESGCM(256) Mac=AEAD
ECDH-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH/ECDSA Au=ECDH Enc=AESGCM(256) Mac=AEAD
ECDH-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH/RSA Au=ECDH Enc=AES(256) Mac=SHA384
ECDH-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH/ECDSA Au=ECDH Enc=AES(256) Mac=SHA384
ECDH-RSA-AES256-SHA SSLv3 Kx=ECDH/RSA Au=ECDH Enc=AES(256) Mac=SHA1
ECDH-ECDSA-AES256-SHA SSLv3 Kx=ECDH/ECDSA Au=ECDH Enc=AES(256) Mac=SHA1
ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(128) Mac=AEAD
ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(128) Mac=AEAD
ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA256
ECDHE-ECDSA-AES128-SHA256 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(128) Mac=SHA256
ECDHE-RSA-AES128-SHA SSLv3 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA1
ECDHE-ECDSA-AES128-SHA SSLv3 Kx=ECDH Au=ECDSA Enc=AES(128) Mac=SHA1
DHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(128) Mac=AEAD
DHE-RSA-AES128-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AES(128) Mac=SHA256
DHE-RSA-AES128-SHA SSLv3 Kx=DH Au=RSA Enc=AES(128) Mac=SHA1
DHE-RSA-CAMELLIA128-SHA SSLv3 Kx=DH Au=RSA Enc=Camellia(128) Mac=SHA1
ECDH-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH/RSA Au=ECDH Enc=AESGCM(128) Mac=AEAD
ECDH-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH/ECDSA Au=ECDH Enc=AESGCM(128) Mac=AEAD
ECDH-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH/RSA Au=ECDH Enc=AES(128) Mac=SHA256
ECDH-ECDSA-AES128-SHA256 TLSv1.2 Kx=ECDH/ECDSA Au=ECDH Enc=AES(128) Mac=SHA256
ECDH-RSA-AES128-SHA SSLv3 Kx=ECDH/RSA Au=ECDH Enc=AES(128) Mac=SHA1
ECDH-ECDSA-AES128-SHA SSLv3 Kx=ECDH/ECDSA Au=ECDH Enc=AES(128) Mac=SHA1
相关的其中一个答案解释了您可能收到的警告。Ok。我已经生成了证书,并像以前一样使用RSA 2048位密钥对其进行了签名。所有OpenSSL函数都可以工作并且不会返回错误,但是我没有得到任何内容。尽管这可能是由其他原因造成的。一旦我把这件事做好,我可能会接受你的回答。