主题
fabric-ca · 模块详解
本仓库 submodule:fabric-ca/。本章只罗列源码 / README.md 实证存在的结构,路径均为该 submodule 内的相对路径。
cmd/
| 子目录 | 入口 | 出处 |
|---|---|---|
cmd/fabric-ca-server/ | main.go:26-30 的 main() → RunMain(os.Args) | cmd/fabric-ca-server/main.go |
↳ servercmd.go | NewCommand() 第 57-65 行;rootCmd 第 77-90 行;子命令 init(93-109)/ start(111-127)/ version(129-136) | 同 |
cmd/fabric-ca-client/ | main.go:26-29 的 main() → command.RunMain(os.Args) | cmd/fabric-ca-client/main.go |
↳ command/root.go | RunMain() 第 22-39 行 | cmd/fabric-ca-client/command/root.go |
↳ command/clientcmd.go | NewCommand() 第 116-123 行;rootCmd 第 134-152 行;子命令注册 153-169 行;子命令常量 30-35 行 | 同 |
客户端子命令对应源码文件(同 command/ 目录):register.go、enroll.go、reenroll.go、revoke.go、getcainfo.go、gencsr.go、gencrl.go、identity.go、affiliation.go、certificate.go。
lib/ 核心
服务器与 CA
| 文件 | 关键符号 | 行号 |
|---|---|---|
lib/server.go | Server struct | 67-95 |
registerHandlers() | 549-564 | |
registerHandler() | 567-570 | |
lib/serverconfig.go | ServerConfig struct | 29-61 |
DefaultServerPort = 7054 | 16 | |
DefaultServerAddr = "0.0.0.0" | 19 | |
lib/ca.go | CA struct | 73-104 |
newCA() | 112-124 | |
initCA() | 127-148 | |
lib/caconfig.go | CAConfig struct | 81-98 |
CAConfigDB struct(含 def 标签) | 127-131 | |
lib/serverendpoint.go | serverEndpoint struct | 19-30 |
端点处理器(HTTP)
每个端点通常占一个独立文件:
| 端点 | 文件 | 行号 |
|---|---|---|
cainfo | lib/serverinfo.go | 14-20(注册)、24(handler) |
register | lib/serverregister.go | 23-31 / 34 |
enroll / reenroll | lib/serverenroll.go | 49-57 / 59-67 / 70 |
idemix/credential | lib/serveridemixenroll.go | 16-24 / 27 |
idemix/cri | lib/serveridemixcri.go | 13-21 / 24 |
revoke | lib/serverrevoke.go | 36-43 |
gencrl | lib/servergencrl.go | 36-43 |
identities | lib/serveridentities.go | 35-43 / 45 |
identities/{id} | lib/serveridentities.go | 25-33 |
affiliations | lib/serveraffiliations.go | 36-44 |
affiliations/{affiliation} | lib/serveraffiliations.go | 26-34 / 46 |
certificates | lib/servercertificates.go | 26-34 / 36 |
客户端
| 文件 | 关键符号 | 行号 |
|---|---|---|
lib/client.go | Client struct | 46 |
lib/clientconfig.go | ClientConfig struct | 33-50 |
数据访问
| 文件 | 关键符号 | 行号 |
|---|---|---|
lib/server/db/db.go | DB struct(包 sqlx.DB) | 77-83 |
lib/server/db/factory/factory.go | New(dbType, ...) | 29-47 |
lib/server/db/sqlite/sqlite.go | DDL(参见 02-architecture · 表 schema) | 136-197 |
lib/server/db/migrator.go | Migrator interface | 16-86 |
| 各方言驱动 | lib/server/db/{sqlite,postgres,mysql}/ | — |
Idemix
| 文件 | 用途 |
|---|---|
lib/server/idemix/idemixlib.go | idemix 加密库封装 |
lib/server/idemix/issuer.go | issuer 实现 |
lib/server/idemix/config.go | 配置 |
lib/server/idemix/cri.go | CRI |
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.go | nonce 管理 |
lib/server/idemix/idemix_roles.go | role 定义 |
其它
| 路径 | 用途 |
|---|---|
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.go | PKCS11 keyrequest 支持(按 build tag pkcs11 / !pkcs11 二选一) |
api/
对外 JSON 类型定义。api/client.go 定义高层请求/响应类型(如 RegistrationRequest、EnrollmentRequest、RevocationRequest、CSRInfo 等);api/net.go 定义线缆类型(*Net 后缀,如 EnrollmentRequestNet);api/serverresponses.go 定义服务端响应类型(CAInfoResponseNet、EnrollmentResponseNet、IdemixEnrollmentResponseNet)。
util/
| 文件 | 用途 |
|---|---|
util/csp.go | BCCSP 实现(README.md:58-68) |
其它顶层目录
| 路径 | 用途 |
|---|---|
scripts/ | 脚本(具体内容 [未核]) |
docs/ | 文档(具体内容 [未核]) |
testdata/ | 测试数据 |
vendor/ | go vendor 依赖锁定 |
看代码路径建议
cmd/fabric-ca-server/main.go→servercmd.gocobra 树。lib/server.go:Server→Server.Start→registerHandlers()(549-564)。- 任选端点(如
lib/serverenroll.go:70enrollHandler),跟到底层 BCCSP 调用。 lib/ca.go:127-148initCA()看启动初始化(含 Idemix 子系统)。lib/server/db/factory/factory.go:29-47看 DB 多方言工厂。- 想了解 Idemix,单读
lib/server/idemix/与外部依赖github.com/IBM/idemix。