Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Openssl (具有ECDSA证书的TLS)握手失败,因为没有共享密码_Openssl_Ssl Certificate_Ecdsa - Fatal编程技术网

Openssl (具有ECDSA证书的TLS)握手失败,因为没有共享密码

Openssl (具有ECDSA证书的TLS)握手失败,因为没有共享密码,openssl,ssl-certificate,ecdsa,Openssl,Ssl Certificate,Ecdsa,我一直在使用自行生成的RSA证书颁发机构来签署我的服务器证书,到目前为止,一切正常 按照相同的模式,我尝试使用ECDSA签名,假设较小的密钥大小可能使物联网设备更容易使用。 不幸的是,我无法获得“工作”证书 使用openssl(openssl 1.1.0l,2019年9月10日)测试证书时,我(在服务器上)收到一条错误消息,上面写着“tls\U post\U process\U client\U hello:无共享密码” 服务器端: openssl s_server -accept 1443 -

我一直在使用自行生成的RSA证书颁发机构来签署我的服务器证书,到目前为止,一切正常

按照相同的模式,我尝试使用ECDSA签名,假设较小的密钥大小可能使物联网设备更容易使用。 不幸的是,我无法获得“工作”证书

使用openssl(openssl 1.1.0l,2019年9月10日)测试证书时,我(在服务器上)收到一条错误消息,上面写着“tls\U post\U process\U client\U hello:无共享密码”

服务器端:

openssl s_server -accept 1443 -www -key ec_server_key.pem -cert ec_server_cert.pem 
Using default temp DH parameters
ACCEPT
140203753312320:error:1417A0C1:SSL routines:tls_post_process_client_hello:no shared cipher:../ssl/statem/statem_srvr.c:1419:
客户端:

openssl s_client -showcerts -connect localhost:1443 -CAfile ec_ca.pem 
CONNECTED(00000003)
139868026671168:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:../ssl/record/rec_layer_s3.c:1407:SSL alert number 40
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 176 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : 0000
    Session-ID: 
    Session-ID-ctx: 
    Master-Key: 
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1618487596
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no
---
使用RSA签名,一切正常

这就是我使用RSA生成证书的方式

#!/bin/bash
# CERTIFICATE AUTHORITY
# generate CA private key
openssl genrsa -aes256 -passout pass:password -out rsa_ca_key.pem 4096
# generate CA public key
openssl req -new -x509 -sha256 -passin pass:password -days 365 -subj "/C=CO/ST=State/L=City/O=Organization/CN=AuthorityName" -key rsa_ca_key.pem -out rsa_ca.pem

# FOR EACH SERVER
# generate server private key
openssl genrsa -out rsa_server_key.pem 4096
# generate server certificate
openssl req -new -sha256 -subj "/CN=server_name" -key rsa_server_key.pem -out rsa_server.csr
# generate extension
echo subjectAltName = DNS:server_domain,IP:10.10.10.20,IP:127.0.0.1 > extfile.cnf
# sign the server certificate
openssl x509 -req -sha256 -days 365 -in rsa_server.csr -CA rsa_ca.pem -CAkey rsa_ca_key.pem -CAcreateserial -out rsa_server_cert.pem -extfile extfile.cnf -passin pass:password
# clean up
rm extfile.cnf rsa_server.csr
这就是我用ECDSA生成证书的方法

#!/bin/bash
# CERTIFICATE AUTHORITY
# generate CA private key
openssl ecparam -genkey -name secp256k1 -param_enc explicit | openssl ec -aes256 -passout pass:password -out ec_ca_key.pem
# generate CA public key
openssl req -new -x509 -sha256 -passin pass:password -days 365 -subj "/C=CO/ST=State/L=City/O=Organization/CN=AuthorityName" -key ec_ca_key.pem -out ec_ca.pem

# FOR EACH SERVER
# generate server private key
openssl ecparam -name secp256k1 -genkey -param_enc explicit -out ec_server_key.pem
# generate server certificate
openssl req -new -sha256 -subj "/CN=server_name" -key ec_server_key.pem -out ec_server.csr
# generate extension
echo subjectAltName = DNS:server_domain,IP:10.10.10.20,IP:127.0.0.1 > extfile.cnf
# sign the server certificate
openssl x509 -req -sha256 -days 365 -in ec_server.csr -CA ec_ca.pem -CAkey ec_ca_key.pem -CAcreateserial -out ec_server_cert.pem -extfile extfile.cnf -passin pass:password
# clean up
rm extfile.cnf ec_server.csr

请在服务器端和客户端添加TLS版本和专用曲线,如下所示

  • openssl s_服务器-接受1443-www-key ec_server_key.pem-cert ec_server_cert.pem-tls1_2-curves secp256k1
  • openssl s_客户端-showcerts-connect localhost:1443-CAfile ec_ca.pem-tls1_2-curves secp256k1

  • 尝试使用不同的曲线。曲线
    secp256k1
    不在OpenSSL的默认曲线列表中。我建议改为
    secp256r1
    。谢谢。改变了曲线,现在一切正常!EC签名比RSA签名小,但在客户端速度较慢(特别是当它不是经过优化的asm案例之一时)。证书可以更小,但不能像您那样使用-param_enc explicit,这也可能不可互操作;见(我的)。(@Matt:我没有注意到我们现在识别出与命名曲线匹配的显式参数;修复了其他答案。)@dave_thompson_085我想这只是3.0版本的???@dave_thompson_085谢谢你的评论,这听起来不错,因为我使用的客户端是一个内存受限的小型设备谢谢你的回答。我用Matt Caswell建议的secp256r1曲线修复了这个问题。