Hyperledger Fabric节点TLS证书中的密钥用法

时间:2020-07-21 10:43:01

标签: ssl hyperledger-fabric tls1.2 hyperledger-fabric-ca

我正在使用Fabric CA在Hyperledger Fabric中生成证书。我正在传递自签名证书作为HLF中注册和TLS证书发行的根证书。它仅用于测试目的,因此使用相同的Fabric CA(单根证书)来颁发注册和TLS证书。根证书具有以下Key Usages

X509v3 Key Usage: critical
    Digital Signature, Certificate Sign, CRL Sign
X509v3 Extended Key Usage:
    TLS Web Server Authentication, TLS Web Client Authentication

在节点注册证书中,我有以下Key Usages

X509v3 Key Usage: critical
    Digital Signature

现在,对于TLS证书,我运行fabric-ca-client enroll命令并将--enrollment.profile tls作为参数传递给调用。解码节点TLS PEM证书时,得到以下Key Usages

X509v3 Key Usage: critical
    Digital Signature, Key Encipherment, Key Agreement
X509v3 Extended Key Usage:
    TLS Web Server Authentication, TLS Web Client Authentication 

现在,我指的是一个RFC here,用于标识椭圆曲线密码学主题公钥信息。在第3节中,我读到Key Encipherment对于椭圆曲线证书不是有效的密钥用法扩展。通过更多的研究,我还发现Key Encipherment用于对称密钥加密(如果我输入错误,请更正)。

现在,我的问题是:

  1. 如果Fabric CA不符合ECC RFC标准,为什么会在节点TLS证书中添加Key Encipherment作为密钥用法?
  2. 在椭圆曲线证书和密钥的情况下,TLS通信实际上如何发生?

1 个答案:

答案 0 :(得分:0)

Fabric CA当前支持颁发EC和RSA证书。默认的tls配置文件设置了两者所需的密钥用法/扩展密钥用法。

如果要限制使用,可以在tls中编辑fabric-ca-server-config.yaml签名配置文件部分:

signing:
    default:
      usage:
        - digital signature
      expiry: 8760h
    profiles:
      ca:
         usage:
           - cert sign
           - crl sign
         expiry: 43800h
         caconstraint:
           isca: true
           maxpathlen: 0
      tls:
         usage:
            - signing
            - server auth
            - client auth
         expiry: 8760h

Fabric CA仅检查以确保根证书的CA约束设置为true。它并没有将它所签名的证书的密钥用法限制为自己的扩展名(这不是技术要求)。如果证书的使用者也希望基于颁发者强制执行证书的使用约束,则他们自己这样做。例如,openssl确保允许CA使用所需的密钥用法来签署证书。但是,它不禁止其他扩展。