配置双头 CA

Configuring dual-headed CA

我正在尝试配置一个 双头 CA(不同的加密 material 用于同一节点上的签名和 TLS) 相互-TLS 通过使用 --cafiles 根据:

所以第一个问题是:他们必须有不同的端口吗?

我是这样启动 CA 的:

export FABRIC_CA_SERVER_HOME=/config/tls-ca
fabric-ca-server start -b admin:adminpw --cafiles /config/ca/fabric-ca-server-config.yaml

这样,在 /config/tls-ca 文件夹中会在启动时创建 ca-cert.pemtls-cert.pem,以及 /config/ca/ca-cert.pem(但没有 tls-cert.pem).因此,FABRIC_CA_SERVER_HOME 创建哪个 CA,--cafiles 创建哪个 CA 似乎很重要,不是吗? (第二题)

第三个问题:每个fabric-ca-server-config.yaml应该如何引用正确的文件?

目前,TLS-CA的是这个(重要部分):

port: 7054
tls:
  enabled: true
  certfile: # leave empty?
  keyfile:  # leave empty?
  clientauth:
    type: RequireAndVerifyClientCert
    certfiles:
      - /config/tls-ca/tls-cert.pem # or /config/tls-ca/ca-cert.pem? Or empty?
ca:
  name: Org1TLSCA
csr:
   cn: org1-tls-ca

Signing-CA的是这个(重要部分):

port: 7054 # same port allowed?
tls:
  enabled: true
  certfile: # Do I first have to register and enroll at the TLS-CA and then restart all?
  keyfile:  # see above
  clientauth:
    type: RequireAndVerifyClientCert
    certfiles:
      - /config/tls-ca/tls-cert.pem # or /config/tls-ca/ca-cert.pem? Or empty?
ca:
  name: Org1CA
csr:
   cn: org1-ca

感觉就像先有鸡还是先有蛋的问题,我不确定要使用哪些文件。感谢任何帮助。

亲切的问候

[编辑] 额外问题: 当 TLS-CA 启用双向 TLS 时,如何为 fabric-ca-client 颁发证书?它无法与服务器通信,因为缺少证书,但它需要颁发证书...

好的,我终于找到方法了

  1. 创建两个 fabric-ca-server-config.yaml 文件。一份用于 CA,一份用于 TLS-CA 部分:

    config/ca/fabric-ca-server-config.yaml:

    port: 7054
    tls:
      enabled: true
      certfile: /config/ca/tls-msp/signcerts/cert.pem
      keyfile:  /config/ca/tls-msp/keystore/key.pem
      clientauth:
        type: NoClientCert
        certfiles:
          - /config/tls-ca/ca-cert.pem
    ca:
      name: CA
    csr:
       cn: org1-ca
    

    config/tls-ca/fabric-ca-server-config.yaml:

    port: 7054
    tls:
      enabled: true
      certfile: # leave empty
      keyfile:  # leave empty
      clientauth:
        type: RequireAndVerifyClientCert
        certfiles:
          - /config/tls-ca/ca-cert.pem
    ca:
      name: TLSCA
    csr:
       cn: org1-tls-ca
    
  2. 启动服务器:

    export FABRIC_CA_SERVER_HOME=/config/tls-ca
    export FABRIC_CA_SERVER_TLS_CLIENTAUTH_TYPE=NoClientCert
    fabric-ca-server start -b tls-ca-admin:adminpw --cafiles /config/ca/fabric-ca-server-config.yaml
    
  3. 注册 TLS-CA 管理员

    export FABRIC_CA_CLIENT_TLS_CERTFILES=/config/tls-ca/ca-cert.pem
    export FABRIC_CA_CLIENT_HOME=msps/org1/tls-ca-admin
    export FABRIC_CA_CLIENT_MSPDIR=msp
    fabric-ca-client enroll -d -u https://tls-ca-admin:adminpw@localhost:7054 --caname TLSCA
    
  4. 为 (signing-material-)CA 和 fabric-ca-client 创建 TLS 证书:

    export FABRIC_CA_CLIENT_TLS_CERTFILES=/config/tls-ca/ca-cert.pem
    export FABRIC_CA_CLIENT_HOME=msps/org1/tls-ca-admin
    export FABRIC_CA_CLIENT_MSPDIR=msp
    fabric-ca-client register -d --id.name ca --id.secret caPW --id.type client -u https://localhost:7054 --caname TLSCA
    fabric-ca-client register -d --id.name ca-client --id.secret caclientPW --id.type client -u https://localhost:7054 --caname TLSCA
    
    export FABRIC_CA_CLIENT_HOME=msps/org1/ca
    export FABRIC_CA_CLIENT_MSPDIR=tls-msp
    fabric-ca-client enroll -d --enrollment.profile tls -u https://ca:caPW@localhost:7054 --caname TLSCA
    
    export FABRIC_CA_CLIENT_HOME=msps/org1/ca-client
    fabric-ca-client enroll -d --enrollment.profile tls -u https://ca-client:caclientPW@localhost:7054 --caname TLSCA
    
  5. 将生成的 TLS material 复制到 CA 的文件夹中:
    cp -r msps/org1/ca/tls-msp /config/org1/ca/

  6. 关闭 CA 服务器并重新启动它:

    export FABRIC_CA_SERVER_HOME=/config/tls-ca
    export FABRIC_CA_SERVER_TLS_CLIENTAUTH_TYPE=RequireAndVerifyClientCert
    fabric-ca-server start --cafiles /config/ca/fabric-ca-server-config.yaml
    
  7. 大功告成! 注意:由于CA和TLS-CA部分有相同的端口,所以需要在每个fabric-ca-client命令后附加--caname。否则服务器不知道如何路由您的请求。