是否有任何openssl命令行用于验证ECDSA prime256v1证书和私钥匹配?

是否有任何openssl命令行用于验证ECDSA prime256v1证书和私钥匹配?,openssl,hyperledger-fabric,Openssl,Hyperledger Fabric,我现在正在测试hyperledger/fabric/core/comm/testdata/certs/generate.go以获取ECDSA prime256v1证书(Org1-cert.pem)和私钥(Org1-key.pem)。 我想使用openssl命令行测试Org1-cert.pem是否与Org1-key.pem匹配,但不知道如何匹配?谢谢你的帮助。 我使用了该命令,但结果不匹配 # openssl x509 -pubkey -in Org1-cert.pem -noout | open

我现在正在测试hyperledger/fabric/core/comm/testdata/certs/generate.go以获取ECDSA prime256v1证书(Org1-cert.pem)和私钥(Org1-key.pem)。 我想使用openssl命令行测试Org1-cert.pem是否与Org1-key.pem匹配,但不知道如何匹配?谢谢你的帮助。 我使用了该命令,但结果不匹配

# openssl x509 -pubkey -in Org1-cert.pem -noout | openssl md5
(标准偏差)=4F8782BBE9D258553F0C0C7C6879FEF

# openssl pkey -pubout -in Org1-key.pem | openssl md5
(标准输入)=98c3ec3c2971648f2721915ff7e80479

有关Org1-cert.pem和Org1-key.pem的更多信息,请参见下文:

# openssl x509 -in Org1-cert.pem -text -noout
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            50:0a:7a:e4:31:6e:1b:57:68:48:26:d7:a0:c5:9c:da
    Signature Algorithm: ecdsa-with-SHA256
        Issuer: C = US, ST = California, L = San Francisco, O = Org1, CN = Org1
        Validity
            Not Before: Nov 13 09:09:06 2017 GMT
            Not After : Nov 11 09:09:06 2027 GMT
        Subject: C = US, ST = California, L = San Francisco, O = Org1, CN = Org1
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:ac:bb:17:91:91:1e:72:38:d2:aa:9a:2d:17:c8:
                    50:80:18:58:4a:a8:6a:40:0a:a8:2a:a8:58:33:46:
                    ae:2c:48:67:28:c7:af:59:09:92:01:68:15:cd:e5:
                    c0:84:d1:1e:3e:03:60:25:8b:55:89:3e:e9:e2:f1:
                    23:3e:e4:c4:c8
                ASN1 OID: prime256v1
                NIST CURVE: P-256
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment, Certificate Sign, CRL Sign
            X509v3 Extended Key Usage:
                Any Extended Key Usage
            X509v3 Basic Constraints: critical
                CA:TRUE
            X509v3 Subject Key Identifier:
                01:02:03:04
    Signature Algorithm: ecdsa-with-SHA256
         30:46:02:21:00:b4:81:76:75:fe:a1:1c:14:94:3e:d6:eb:b3:
         43:02:27:32:46:2e:c0:6d:b7:94:3b:9d:a9:05:ad:c9:10:29:
         34:02:21:00:80:31:3c:00:18:b3:c0:be:1d:73:dc:ab:9b:aa:
         28:75:86:bc:2a:97:64:9d:65:5f:6f:6f:a0:c8:38:aa:2c:35

    # more Org1-key.pem

-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIDgnuzTIxFYZorg/lKBQxwpyXWH7zREzuO8Gle9p8CzQoAoGCCqGSM49
AwEHoUQDQgAEsYeTGiApHX1SJAZ7HmroVR1YNBH6wc0WqiNWO/N3XG/aWxksYLA8
s2asE88Z5EOWs1qMLig2nyv3CL0H2VI0zg==
-----END EC PRIVATE KEY-----

    # more Org1-cert.pem

-----BEGIN CERTIFICATE-----
MIIB8jCCAZegAwIBAgIQUAp65DFuG1doSCbXoMWc2jAKBggqhkjOPQQDAjBYMQsw
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
YW5jaXNjbzENMAsGA1UEChMET3JnMTENMAsGA1UEAxMET3JnMTAeFw0xNzExMTMw
OTA5MDZaFw0yNzExMTEwOTA5MDZaMFgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpD
YWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMQ0wCwYDVQQKEwRPcmcx
MQ0wCwYDVQQDEwRPcmcxMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAErLsXkZEe
cjjSqpotF8hQgBhYSqhqQAqoKqhYM0auLEhnKMevWQmSAWgVzeXAhNEePgNgJYtV
iT7p4vEjPuTEyKNDMEEwDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYGBFUdJQAw
DwYDVR0TAQH/BAUwAwEB/zANBgNVHQ4EBgQEAQIDBDAKBggqhkjOPQQDAgNJADBG
AiEAtIF2df6hHBSUPtbrs0MCJzJGLsBtt5Q7nakFrckQKTQCIQCAMTwAGLPAvh1z
3Kubqih1hrwql2SdZV9vb6DIOKosNQ==
-----END CERTIFICATE-----

您需要做的是读取证书和私钥,并检查证书的公钥是否与私钥中的公钥匹配

openssl x509 -in signcerts/peer.pem -text -noout




您需要做的是读取证书和私钥,并检查证书的公钥是否与私钥中的公钥匹配

openssl x509 -in signcerts/peer.pem -text -noout




您可以使用OpenSSL验证证书和任何受支持的密钥(包括ECDSA prime256v1密钥)是否匹配

此命令将从证书获取公钥:

openssl x509 -noout -pubkey -in Org1-cert.pem
此命令将从密钥获取公钥:

openssl pkey -pubout -in Org1-key.pem
你可以直观地比较它们

或者,您可以使用Bash自动比较任何证书和密钥,如下所示:
  • 创建名为“验证证书密钥”的脚本:

    #!/usr/bin/env bash
    certFile="${1}"
    keyFile="${2}"
    certPubKey="$(openssl x509 -noout -pubkey -in "${certFile}")"
    keyPubKey="$(openssl pkey -pubout -in "${keyFile}")"
    if [[ "${certPubKey}" == "${keyPubKey}" ]]
    then
      echo "PASS: key and cert match"
    else
      echo "FAIL: key and cert DO NOT match"
    fi
    
  • 使脚本可执行:

    chmod +x verify-cert-key
    
  • 运行它:

    ./verify-cert-key Org1-cert.pem Org1-key.pem
    
  • 警告:macOS Sierra上的openssl没有pkey 在macOS Sierra上,脚本可能会说“失败:密钥和证书不匹配”,即使它们匹配

    验证pkey是否丢失:

    openssl pkey -in
    
    如果缺少,您将看到以下内容:

    openssl:Error: 'pkey' is an invalid command.
    
    接着是来自OpenSSL的大量其他使用情况摘要输出

    您还可能会看到“openssl:Error:'pkey'是无效命令。”

    如果缺少pkey,则需要安装一个更新的openssl并相应地设置路径

    我使用自制软件安装了更新的OpenSSL,并按如下方式设置路径:

    export PATH=/usr/local/Cellar/openssl/1.0.2m/bin/:$PATH
    
    验证pkey是否可用:

    openssl pkey -in
    
    这应显示pkey使用情况摘要:

    Usage pkey [options]
    where options are
    

    现在,脚本应该可以按预期工作。

    您可以使用OpenSSL验证证书和任何受支持的密钥(包括ECDSA prime256v1密钥)是否匹配

    此命令将从证书获取公钥:

    openssl x509 -noout -pubkey -in Org1-cert.pem
    
    此命令将从密钥获取公钥:

    openssl pkey -pubout -in Org1-key.pem
    
    你可以直观地比较它们

    或者,您可以使用Bash自动比较任何证书和密钥,如下所示:
  • 创建名为“验证证书密钥”的脚本:

    #!/usr/bin/env bash
    certFile="${1}"
    keyFile="${2}"
    certPubKey="$(openssl x509 -noout -pubkey -in "${certFile}")"
    keyPubKey="$(openssl pkey -pubout -in "${keyFile}")"
    if [[ "${certPubKey}" == "${keyPubKey}" ]]
    then
      echo "PASS: key and cert match"
    else
      echo "FAIL: key and cert DO NOT match"
    fi
    
  • 使脚本可执行:

    chmod +x verify-cert-key
    
  • 运行它:

    ./verify-cert-key Org1-cert.pem Org1-key.pem
    
  • 警告:macOS Sierra上的openssl没有pkey 在macOS Sierra上,脚本可能会说“失败:密钥和证书不匹配”,即使它们匹配

    验证pkey是否丢失:

    openssl pkey -in
    
    如果缺少,您将看到以下内容:

    openssl:Error: 'pkey' is an invalid command.
    
    接着是来自OpenSSL的大量其他使用情况摘要输出

    您还可能会看到“openssl:Error:'pkey'是无效命令。”

    如果缺少pkey,则需要安装一个更新的openssl并相应地设置路径

    我使用自制软件安装了更新的OpenSSL,并按如下方式设置路径:

    export PATH=/usr/local/Cellar/openssl/1.0.2m/bin/:$PATH
    
    验证pkey是否可用:

    openssl pkey -in
    
    这应显示pkey使用情况摘要:

    Usage pkey [options]
    where options are
    

    现在脚本应该可以正常工作了。

    非常感谢。我知道原因。它对CA证书和由根证书签名的私钥很有用。有没有办法验证根证书和相应的私钥?对于“X509v3基本约束:关键CA:TRUE”而不是FALSE?我不明白你在问什么,非常感谢。我知道原因。它对CA证书和由根证书签名的私钥很有用。有没有办法验证根证书和相应的私钥?对于“X509v3基本约束:关键CA:TRUE”而不是FALSE?我不明白你在问什么。非常感谢。这正是我想要的。谢谢。它很有效。您还可以通过在两行末尾添加以下| openssl来验证两个输出的MD5md5@Aschwin鉴于md5可能发生碰撞,不确定比较md5除了降低评估的确定性外还能实现什么。嗨@AlainO'Dea,它只是作为一条直线产生一个校验和。因此,您可以比较两个单校验和,而不是由几行组成的键。就是这样。剧本上说的“通过…”或“失败…”是否不足以达到这个目的?我并不期望人们在视觉上区分他们自己,这就是我提供脚本的原因。非常感谢。这正是我想要的。谢谢。它很有效。您还可以通过在两行末尾添加以下| openssl来验证两个输出的MD5md5@Aschwin鉴于md5可能发生碰撞,不确定比较md5除了降低评估的确定性外还能实现什么。嗨@AlainO'Dea,它只是作为一条直线产生一个校验和。因此,您可以比较两个单校验和,而不是由几行组成的键。就是这样。剧本上说的“通过…”或“失败…”是否不足以达到这个目的?我并不期望人们在视觉上区分他们自己,这就是我提供脚本的原因。