没有适用于特定ECDSA证书的密码

问题描述 投票:0回答:2

我正在构建通过openssl与在线服务器进行通信的IOT设备的原型。该软件使用使用我自己的子证书签名的ECDSA证书。

问题似乎是该证书没有可用的密码。为了测试整个事情,我在服务器端使用了openssl s_server,在客户端使用了nmap ssl-enum-ciphers脚本。 nmap返回无效的密码列表。

给服务器的命令是:

openssl s_server -accept 4433 -cert server1.crt -certform PEM -key server1.key

这是我在服务器端使用的证书。

Certificate:
Data:
    Version: 3 (0x2)
    Serial Number: 256 (0x100)
Signature Algorithm: ecdsa-with-SHA256
    Issuer: C=IT, O=wwwtech, CN=wwwtech Server CA
    Validity
        Not Before: Jul 17 12:11:31 2017 GMT
        Not After : Jul 17 12:11:31 2019 GMT
    Subject: C=IT, O=wwwtech, CN=server1
    Subject Public Key Info:
        Public Key Algorithm: id-ecPublicKey
            Public-Key: (160 bit)
            pub: 
                04:1c:e3:02:ec:bc:0f:88:7a:58:0b:36:b6:55:2c:
                e5:f1:67:5f:a0:7a:c3:c9:4b:7c:45:02:42:61:20:
                0c:4d:30:22:f6:c7:09:b5:ef:e1:8e
            ASN1 OID: brainpoolP160r1
    X509v3 extensions:
        X509v3 Basic Constraints: 
            CA:FALSE
        X509v3 Key Usage: 
            Key Encipherment
        Netscape Cert Type: 
            SSL Server
        Netscape Comment: 
            AreaWFI Server Certificate
        X509v3 Subject Key Identifier: 
            8D:92:1A:9F:6A:AB:D2:E5:6B:72:CB:25:A9:15:27:38:08:CE:DE:A9
        X509v3 Authority Key Identifier: 
            keyid:E7:2F:0E:A7:39:B4:85:46:FE:2A:EA:9F:0A:FE:54:F4:B9:A5:B6:AC

        X509v3 Subject Alternative Name: 
            IP Address:127.0.0.1
Signature Algorithm: ecdsa-with-SHA256
     30:44:02:20:32:f1:d1:90:08:f1:dc:a5:9d:30:d3:db:4b:05:
     6c:d2:41:cc:ac:6f:01:f8:90:0d:a5:25:27:4d:f9:38:62:14:
     02:20:19:37:c4:7c:07:e9:07:2d:c8:6e:1f:a4:db:4e:44:48:
     68:4a:e9:9d:03:68:b3:b0:c6:31:60:92:ed:54:5c:22
ssl openssl ssl-certificate ecdsa
2个回答
2
投票

您的证书正在使用brainpoolP160r1曲线。 libcrypto支持此曲线,但libssl支持not。可能是因为这不够安全(它仅提供相当于80位的安全性)。如果您尝试使用其他(更安全)曲线,可能会获得更好的结果。

您没有说您使用的是哪个版本的OpenSSL。请注意,在OpenSSL 1.1.0中,OpenSSL支持的“默认”曲线为X25519,P-256,P-384和P-512。如果要使用其他曲线,则可能必须使用s_server的“ -curves”参数明确声明它们。 libssl在OpenSSL 1.1.0中支持的唯一Brainpool曲线是brainpoolP256r1,brainpoolP384r1和brainpoolP512r1。

编辑:

[我还注意到,您的X509v3密钥用法为“密钥加密”,对于ECDSA证书没有任何意义(ECDSA不能“加密”任何东西;它是一种数字签名算法)。将密钥用法更改为“数字签名”(或将其完全删除)。


0
投票

问题已解决。我使用prime256v1更改了BrainpoolP160r1,并从签署CA的openssl.conf中删除了keyUsage = KeyEncipherment,然后它开始按预期工作。现在我猜为什么?RFC 5280第4.2.1.3节说:

当主题公用密钥为时,keyEncipherment位为有效。用于加密私钥或私钥,即用于密钥运输。例如,当RSA公用时,该位置1。密钥用于加密对称内容解密密钥或非对称私钥。

这是否在ssl握手期间出现?

© www.soinside.com 2019 - 2024. All rights reserved.