google/certificate-transparency

GitHub: google/certificate-transparency

Google 证书透明度项目的 C++ 实现,提供 TLS 证书审计所需的日志服务器与客户端工具,用于监控和检测异常证书签发(已弃用服务器,推荐使用 Go 版本)。

Stars: 887 | Forks: 290

# certificate-transparency:TLS 证书审计 本仓库已不再积极维护。 使用 Go 编写的 CT 日志服务器和客户端可在以下地址获取: [google/trillian](https://github.com/google/trillian) 和 [google/certificate-transparency-go](https://github.com/google/certificate-transparency-go)。 - [简介](#introduction) - [快速构建入门](#build-quick-start) - [代码布局](#code-layout) - [构建代码](#building-the-code) - [构建依赖](#build-dependencies) - [软件依赖](#software-dependencies) - [构建故障排除](#build-troubleshooting) - [编译器警告/错误](#compiler-warnings-errors) - [在分支上工作](#working-on-a-branch) - [测试代码](#testing-the-code) - [单元测试](#unit-tests) - [测试与日志选项](#testing-and-logging-options) - [部署日志](#deploying-a-log) - [运维日志](#operating-a-log) ## 简介 本仓库包含与[证书透明度](https://www.certificate-transparency.org/) (CT) 相关功能的开源代码。 主要涵盖的领域有: - 一组客户端工具和库,用于以各种编程语言与 CT 日志进行交互。 支持的平台有: - **Linux**:在 Ubuntu 14.04 上测试通过;其他版本 (Fedora 22, CentOS 7) 可能需要调整[编译器选项](#build-troubleshooting)。 - **OS X**:10.10 版本 - **FreeBSD**:10.* 版本 ## C++ 日志服务器弃用通知 曾经位于此仓库中的 CT 日志服务器实现不再处于活跃开发状态。我们建议新的部署使用基于 Go 的新服务器,它可以处理更大的 Merkle 树: [CT Personality](https://github.com/google/certificate-transparency-go) [通用后端](https://github.com/google/trillian) 有关我们为何提出此建议的更多信息,请参阅[弃用说明](DEPRECATED.md) 注意:此通知仅涉及服务器,不涉及本仓库中的其他客户端代码。 ## 快速构建入门 首先,确保构建机器具备所有必需的[构建依赖](#build-dependencies)。 然后使用 [gclient](https://www.chromium.org/developers/how-tos/depottools#TOC-gclient) 获取并构建日志所需的[其他软件](#software-dependencies), 接着使用 (GNU) `make` 来构建和测试 CT 代码: ``` export CXX=clang++ CC=clang mkdir ct # or whatever directory you prefer cd ct gclient config --name="certificate-transparency" https://github.com/google/certificate-transparency.git gclient sync --disable-syntax-validation # retrieve and build dependencies # 如果你的平台将其称为 gmake 或 gnumake,请替换上方的命令: make -C certificate-transparency check # build the CT software & self-test ``` ## 代码布局 源代码通常根据实现语言排列在 `cpp` 和 `python` 子目录中。([Java](https://github.com/google/certificate-transparency-java) 和 [Go](https://github.com/google/certificate-transparency-go) 代码位于单独的仓库中。) 关键的子目录包括: - 用于主要的分布式 CT 日志本身: - `cpp/log`:主要的分布式 CT 日志实现。 - `cpp/merkletree`:Merkle 树实现。 - `cpp/monitoring`:用于从 CT 日志导出操作统计信息的代码。 - 用于访问 CT 日志实例的客户端代码: - `cpp/client`:C++ 编写的 CT 日志客户端代码 - `python/ct`:Python 编写的 CT 日志客户端代码 ## 构建代码 本仓库中的 CT 软件依赖于许多其他[开源项目](#software-dependencies),我们建议: - CT 软件应使用这些依赖项的本地副本来构建,而不是使用已安装的包,以防止版本不兼容。 - 依赖库应静态链接到 CT 二进制文件中,而不是依赖于部署环境中可能不同的动态链接库。 支持的构建系统使用 Chromium 项目的 [gclient](https://www.chromium.org/developers/how-tos/depottools#TOC-gclient) 工具来处理这些要求,并确保可靠、可重现的构建。不再支持使用 [Ubuntu](docs/archive/BuildUbuntu.md) 或 [Fedora](docs/archive/BuildFedora.md) 包以及[从源代码手动构建依赖项](docs/archive/BuildSrc.md)的旧版构建说明。 在顶层主目录中,gclient 负责处理以下过程: - 为每个依赖项生成子目录 - 为 CT 日志代码本身生成一个子目录 - 构建所有依赖项 - 将构建好的依赖项安装到 `install/` 子目录中 - 配置 CT 构建以引用已构建的依赖项。 在底层,此 gclient 构建过程由以下内容控制: - 主 [DEPS](DEPS) 文件,它配置依赖项所需源代码的位置和版本,并挂钩到... - [build/](build) 子目录中的 makefile,它们控制每个依赖项的构建过程,确保: - 构建静态库。 - 将构建的代码安装到本地的 `install/` 目录中,CT 代码本身的构建可以从该目录获取它们。 ### 构建依赖 构建 CT 软件及其依赖项需要以下工具。 - [depot_tools](https://www.chromium.org/developers/how-tos/install-depot-tools) - autoconf/automake 等 - libtool - shtool - clang++ (>=3.4) - cmake (>=v3.1.2) - git - GNU make - Tcl - pkg-config - Python 2.7 安装这些工具所需的确切软件包取决于平台。 对于基于 Debian 的系统,相关的软件包有: `autoconf automake libtool shtool cmake clang git make tcl pkg-config python2.7` ### 软件依赖 主要的 CT 日志代码库使用了以下附加软件集合。 - Google 实用库: - [gflags](https://github.com/gflags/gflags):命令行标志处理 - [glog](https://github.com/google/glog):日志基础设施,也需要 libunwind。 - [Google Mock](https://github.com/google/googlemock.git):C++ 测试框架 - [Google Test](https://github.com/google/googletest.git):C++ 模拟框架 - [Protocol Buffers](https://developers.google.com/protocol-buffers/):语言中立的数据序列化库 - [tcmalloc](http://goog-perftools.sourceforge.net/doc/tcmalloc.html):针对多线程使用优化的高效 `malloc` 替代品 - 其他实用库: - [libevent](http://libevent.org/):事件处理库 - [libevhtp](https://github.com/ellzey/libevhtp):用于 libevent 的 HTTP 服务器插件/替代品 - [json-c](https://github.com/json-c/json-c):JSON 处理库 - [libunwind](http://www.nongnu.org/libunwind/):用于生成堆栈跟踪的库 - [OpenSSL](https://github.com/google/googletest.git):默认的密码学库。 ## 构建故障排除 ### 编译器警告/错误 CT C++ 代码库使用 Clang 的 `-Werror` 标志构建,以便代码库保持无警告状态。然而,当使用不同或较新版本的 C++ 编译器时,这可能会导致构建错误,因为任何新产生的警告都会被当作错误处理。要解决此问题,请将适当的 `-Wno-error=` 选项添加到 `CXXFLAGS` 中。 例如,如果出现涉及未使用变量的错误,请尝试使用: ``` CXXFLAGS="-O2 -Wno-error=unused-variable" gclient sync ``` 如果发生关于 `glog` 头文件中未使用 typedef 的错误,请尝试以下操作: ``` CXXFLAGS="-O2 -Wno-error=unused-variable -Wno-error=unused-local-typedefs" gclient sync ``` 更改 `CXXFLAGS` 时,最好删除现有的构建目录,以防某些依赖项未被正确处理并重新构建。如果问题仍然存在,请检查 `certificate-transparency` 中的 Makefile 是否包含传递给 `CXXFLAGS` 的选项。 ### 在分支上工作 如果您尝试从 CT 仓库的某个分支进行克隆,则需要将 `gclient config` 命令替换为[上面](#build-quick-start)的以下命令,并适当替换 `branch` ``` gclient config --name="certificate-transparency" https://github.com/google/certificate-transparency.git@branch ``` 然后从 `gclient sync` 步骤继续[构建过程](#build-quick-start)。 ## 测试代码 ### 单元测试 CT 代码的单元测试可以使用 `certificate-transparency/Makefile` 的 `make check` 目标来运行。 ## 测试与日志选项 请注意,有几个测试会在磁盘上写入文件。存储临时测试数据的默认目录是 `/tmp`。您可以通过为 make 设置 `TMPDIR=` 来更改此设置。 端到端测试也会在 `test/tmp` 中创建临时证书和服务器文件。所有这些文件在测试成功运行后都会被清理。 有关日志选项,请参阅 [glog 文档](http://htmlpreview.github.io/?https://github.com/google/glog/blob/master/doc/glog.html)。 默认情况下,单元测试日志输出到 `stderr`,并且仅记录 FATAL 级别的消息(即那些导致程序异常终止的消息)。您可以使用命令行标志覆盖这些默认设置。
标签:C++, CISA项目, CT Log, DNS解析, Go语言, HTTPS, Merkle树, TLS证书, 公钥基础设施, 加密通信, 安全测试工具, 开源项目, 数据擦除, 日志客户端, 日志服务器, 程序破解, 网站安全, 网络安全, 证书透明度, 逆向工具, 隐私保护