配置双头 CA
Configuring dual-headed CA
我正在尝试配置一个 双头 CA(不同的加密 material 用于同一节点上的签名和 TLS) 相互-TLS 通过使用 --cafiles
根据:
- Setting up multiple CAs(说:至少
ca.name
和 csr.cn
不同)
- CA checklist(表示:
port
和 tls
部分不同)
所以第一个问题是:他们必须有不同的端口吗?
我是这样启动 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.pem
和 tls-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
颁发证书?它无法与服务器通信,因为缺少证书,但它需要颁发证书...
好的,我终于找到方法了
创建两个 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
启动服务器:
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
注册 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
为 (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
将生成的 TLS material 复制到 CA 的文件夹中:
cp -r msps/org1/ca/tls-msp /config/org1/ca/
关闭 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
大功告成! 注意:由于CA和TLS-CA部分有相同的端口,所以需要在每个fabric-ca-client
命令后附加--caname
。否则服务器不知道如何路由您的请求。
我正在尝试配置一个 双头 CA(不同的加密 material 用于同一节点上的签名和 TLS) 相互-TLS 通过使用 --cafiles
根据:
- Setting up multiple CAs(说:至少
ca.name
和csr.cn
不同) - CA checklist(表示:
port
和tls
部分不同)
所以第一个问题是:他们必须有不同的端口吗?
我是这样启动 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.pem
和 tls-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
颁发证书?它无法与服务器通信,因为缺少证书,但它需要颁发证书...
好的,我终于找到方法了
创建两个
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
启动服务器:
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
注册 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
为 (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
将生成的 TLS material 复制到 CA 的文件夹中:
cp -r msps/org1/ca/tls-msp /config/org1/ca/
关闭 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
大功告成! 注意:由于CA和TLS-CA部分有相同的端口,所以需要在每个
fabric-ca-client
命令后附加--caname
。否则服务器不知道如何路由您的请求。