目前我正在研究基于服务器的应用程序,该应用程序使用libssl进行ssl实现 . 当我使用RSA证书时,一切正常,但当我使用Elliptic Curve密钥和我的证书时,我无法连接到服务器 . 当我尝试卷曲时,它会出现以下错误
NSS错误-12286(SSL_ERROR_NO_CYPHER_OVERLAP)无法与对等方安全通信:没有通用加密算法 . 关闭连接0
通过使用“openssl s_client”命令,我发现服务器只提供“ECDH-ECDSA-AES256-GCM-SHA384”,但是curl或chrome无法识别这个密码套件 .
Steps to produce certificate are:
openssl ecparam -name prime256v1 -genkey -noout -out ecCert.key openssl req -new -key ecCert.key -out ecCert.csr -subj /CN=servername.com openssl x509 -req -in ecCert.csr -CA ./ rootCA.pem -CAkey ./rootCA.key -CAcreateserial -sha256 -out ecCert.crt -days 500 cat ecCert.crt ecCert.key> ecCert.pem
有没有办法配置服务器的加密方法?
P.S. 我正在使用openssl版本"OpenSSL 1.0.2g 1 Mar 2016"
我还尝试使用SSL_CTX_set_cipher_list(ctx,ciphers)设置密码列表
1 回答
这实际上是正确的方法 . OpenSSL语法中的相关密码是ECDHE-ECDSA-AES128-GCM-SHA256 . 但请注意,为了在服务器端使用任何类型的ECC密码,您还需要设置要与
SSL_CTX_set_tmp_ecdh
一起使用的曲线 .有关更广泛的信息,请参阅jww在Server with ECDHE key and cert not working的优秀答案 .