我尝试将内部 PKI 从 RSA 转移到 EC。因此,我使用曲线生成了一个测试密钥和证书brainpoolP384r1
。证书总体上似乎没问题,因为以下操作按预期工作:
root@server:~# openssl s_server -key /etc/nginx/server.example.com.key.pem -cert cert.pem -accept 4430 -www -curves brainpoolP384r1
user@client:~$ openssl s_client -connect server.example.com:4430 -curves brainpoolP384r1 -CAfile cacert.pem
这些连接良好,证书验证成功。但是,与nginx
的握手失败SSL alert number 40
,这映射到SSL_ERROR_NO_CYPHER_OVERLAP
使用s_client
或浏览器。这是 的 SSL 配置nginx
:
# SSL stuff
ssl_certificate /etc/nginx/server.example.com.bundle.crt;
ssl_certificate_key /etc/nginx/server.example.com.key.pem;
# doesn't work with or without that setting
# ssl_ecdh_curve brainpoolP384r1;
并且/etc/nginx/server.example.com.bundle.crt
是cat cert.pem cacert.pem > /etc/nginx/server.example.com.bundle.crt
。我知道这与证书中的曲线不太一样,但我还是拼命尝试了一下,因为我在配置中ssl_ecdh_curve
找不到 的等价物。然而,无论有没有设置,它都不起作用。-curves
nginx
ssl_ecdh_curve
如果我用 RSA 替换密钥和证书,一切都正常。
我猜我遗漏了一些东西或者nginx
还没有准备好 EC 证书?
答案1
有一个帖子这里很好地涵盖了该主题
设置是
ssl_ecdh_curve secp384r1:prime256v1;