ssl - Hyperledger Fabric 节点 TLS 证书中的 key 用法

标签 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 使用扩展。通过更多的研究,我还发现,Key Encipherment用于对称 key 加密(如果我错了,请纠正我)。
现在,我的问题是:
  • 为什么 Fabric CA 添加 Key Encipherment如果不符合 ECC RFC 标准,作为节点 TLS 证书中的 key 用法?
  • 在椭圆曲线证书和 key 的情况下,TLS 通信实际上是如何发生的?
  • 最佳答案

    Fabric CA 目前支持颁发 EC 和 RSA 证书。默认 tls profile 设置两者所需的 key 用法/扩展 key 用法。
    如果你想限制使用,你可以编辑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 约束设置太正确。它不限制它签署的证书的 key 用法到它自己的扩展(这不是技术要求)。如果证书的消费者也希望基于颁发者对证书实现使用限制,他们自己会这样做。 openssl例如,确保允许 CA 使用它需要的 key 使用来签署证书。但它并不禁止其他扩展。

    关于ssl - Hyperledger Fabric 节点 TLS 证书中的 key 用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63012766/

    相关文章:

    ssl - NGINX + HTTPS 导致外部请求出现 504 Gateway Timeout 错误

    blockchain - super 账本结构在哪里存储区 block 链的数据库?

    node.js - Hyperledger - 编写 REST API 或提交交易来添加/修改 Assets ?

    node.js - NodeJS v12 重新启用 TLS 1.1 和 1.0

    windows - 添加客户端证书后,在使用 Python 和 Postman 的 Windows 上为 "unable to get local issuer certificate"

    git - 如何为所有子域设置 Git 配置选项?

    java - JRE 8u192 - javax.security.auth.login.FailedLoginException : Cannot bind to LDAP server

    python - Scrapy 打开 SSl 错误

    ldap - 使用 openldap 配置 hyperledger Fabric-CA 服务器

    c# - 使用 TLS 1.2 从 HttpClient 连接到 Azure FrontDoor 后面的 API