Skip to content

fabric-ca · 模块详解

本仓库 submodule:fabric-ca/。本章只罗列源码 / README.md 实证存在的结构,路径均为该 submodule 内的相对路径。

cmd/

子目录入口出处
cmd/fabric-ca-server/main.go:26-30main()RunMain(os.Args)cmd/fabric-ca-server/main.go
servercmd.goNewCommand() 第 57-65 行;rootCmd 第 77-90 行;子命令 init(93-109)/ start(111-127)/ version(129-136)
cmd/fabric-ca-client/main.go:26-29main()command.RunMain(os.Args)cmd/fabric-ca-client/main.go
command/root.goRunMain() 第 22-39 行cmd/fabric-ca-client/command/root.go
command/clientcmd.goNewCommand() 第 116-123 行;rootCmd 第 134-152 行;子命令注册 153-169 行;子命令常量 30-35 行

客户端子命令对应源码文件(同 command/ 目录):register.goenroll.goreenroll.gorevoke.gogetcainfo.gogencsr.gogencrl.goidentity.goaffiliation.gocertificate.go

lib/ 核心

服务器与 CA

文件关键符号行号
lib/server.goServer struct67-95
registerHandlers()549-564
registerHandler()567-570
lib/serverconfig.goServerConfig struct29-61
DefaultServerPort = 705416
DefaultServerAddr = "0.0.0.0"19
lib/ca.goCA struct73-104
newCA()112-124
initCA()127-148
lib/caconfig.goCAConfig struct81-98
CAConfigDB struct(含 def 标签)127-131
lib/serverendpoint.goserverEndpoint struct19-30

端点处理器(HTTP)

每个端点通常占一个独立文件:

端点文件行号
cainfolib/serverinfo.go14-20(注册)、24(handler)
registerlib/serverregister.go23-31 / 34
enroll / reenrolllib/serverenroll.go49-57 / 59-67 / 70
idemix/credentiallib/serveridemixenroll.go16-24 / 27
idemix/crilib/serveridemixcri.go13-21 / 24
revokelib/serverrevoke.go36-43
gencrllib/servergencrl.go36-43
identitieslib/serveridentities.go35-43 / 45
identities/{id}lib/serveridentities.go25-33
affiliationslib/serveraffiliations.go36-44
affiliations/{affiliation}lib/serveraffiliations.go26-34 / 46
certificateslib/servercertificates.go26-34 / 36

客户端

文件关键符号行号
lib/client.goClient struct46
lib/clientconfig.goClientConfig struct33-50

数据访问

文件关键符号行号
lib/server/db/db.goDB struct(包 sqlx.DB77-83
lib/server/db/factory/factory.goNew(dbType, ...)29-47
lib/server/db/sqlite/sqlite.goDDL(参见 02-architecture · 表 schema136-197
lib/server/db/migrator.goMigrator interface16-86
各方言驱动lib/server/db/{sqlite,postgres,mysql}/

Idemix

文件用途
lib/server/idemix/idemixlib.goidemix 加密库封装
lib/server/idemix/issuer.goissuer 实现
lib/server/idemix/config.go配置
lib/server/idemix/cri.goCRI
lib/server/idemix/enroll.go注册流程
lib/server/idemix/revocationkey.go撤销密钥
lib/server/idemix/revocationauthority.go撤销授权
lib/server/idemix/issuercredential.go凭证发行
lib/server/idemix/creddbaccessor.go凭证 DB 访问
lib/server/idemix/nonce.gononce 管理
lib/server/idemix/idemix_roles.gorole 定义

其它

路径用途
lib/tls/TLS 配置(lib/server.go:673-680 引用 stls.DefaultCipherSuites
lib/server/ldap/LDAP 客户端(lib/caconfig.go:16 导入;README 中的 lib/ldap 已迁移至此)
lib/spi/用户注册表 SPI(lib/spi/ 目录)
lib/server/db/util/数据库工具(README 中的 lib/dbutil 已迁移至此)
lib/keyrequest.go / lib/keyrequestnopkcs11.goPKCS11 keyrequest 支持(按 build tag pkcs11 / !pkcs11 二选一)

api/

对外 JSON 类型定义。api/client.go 定义高层请求/响应类型(如 RegistrationRequestEnrollmentRequestRevocationRequestCSRInfo 等);api/net.go 定义线缆类型(*Net 后缀,如 EnrollmentRequestNet);api/serverresponses.go 定义服务端响应类型(CAInfoResponseNetEnrollmentResponseNetIdemixEnrollmentResponseNet)。

util/

文件用途
util/csp.goBCCSP 实现(README.md:58-68

其它顶层目录

路径用途
scripts/脚本(具体内容 [未核])
docs/文档(具体内容 [未核])
testdata/测试数据
vendor/go vendor 依赖锁定

看代码路径建议

  1. cmd/fabric-ca-server/main.goservercmd.go cobra 树。
  2. lib/server.go:ServerServer.StartregisterHandlers()(549-564)。
  3. 任选端点(如 lib/serverenroll.go:70 enrollHandler),跟到底层 BCCSP 调用。
  4. lib/ca.go:127-148 initCA() 看启动初始化(含 Idemix 子系统)。
  5. lib/server/db/factory/factory.go:29-47 看 DB 多方言工厂。
  6. 想了解 Idemix,单读 lib/server/idemix/ 与外部依赖 github.com/IBM/idemix