描述 • 使用方法 • 参数 • 工作原理 • 必备条件 • 其他 • 许可证
是一款开源工具,帮助你构建有效的SSL证书链。它还能帮助你修复不完整的证书链,并下载所有缺失的CA证书。你也可以从远程服务器下载所有证书,并正确构建你的证书链。
很简单:
# 克隆此仓库
git clone https://github.com/trimstray/mkchain
# 进入仓库目录
cd mkchain
# 安装
./setup.sh install
# 运行应用
mkchain -i /data/certs -o /data/chain.crt
- 到
bin/mkchain的符号链接放置在/usr/local/bin- 手册页放置在
/usr/local/man/man8
提供以下选项:
Usage:
mkchain <option|long-option>
Examples:
mkchain --in Root.crt --in Intermediate1.crt --in Server.crt --out bundle_chain_certs.crt
mkchain --in /tmp/certs --out bundle_chain_certs.crt --with-root
mkchain -i Server.crt -o bundle_chain_certs.crt
mkchain -i https://incomplete-chain.badssl.com/ --with-root
Options:
--help show this message
--debug displays information on the screen (debug mode)
-i, --in add certificates to merge (file, multiple files, directory with ssl certificates
or remote domain)
-o, --out saves the result (chain) to a file
--with-root add root certificate to certificates chain
-o|--out- 如果不使用此参数,mkchain会将输出链保存到mkchain/chains/目录。
在阅读之前,请先阅读关于 SSL证书链 的文章。
从 ssllabs 的证书链开始。这些证书随 mkchain 一起提供,可以在 example/ssllabs.com 目录中找到,该目录还包含 all 目录(包含组装链所需的所有证书)和 server_certificate 目录(仅包含服务器证书)。
ssllabs.com 域的正确链(openssl 命令的结果):
Certificate chain
0 s:/C=US/ST=California/L=Redwood City/O=Qualys, Inc./CN=ssllabs.com
i:/C=US/O=Entrust, Inc./OU=See www.entrust.net/legal-terms/OU=(c) 2012 Entrust, Inc. - for authorized use only/CN=Entrust Certification Authority - L1K
1 s:/C=US/O=Entrust, Inc./OU=See www.entrust.net/legal-terms/OU=(c) 2012 Entrust, Inc. - for authorized use only/CN=Entrust Certification Authority - L1K
i:/C=US/O=Entrust, Inc./OU=See www.entrust.net/legal-terms/OU=(c) 2009 Entrust, Inc. - for authorized use only/CN=Entrust Root Certification Authority - G2
2 s:/C=US/O=Entrust, Inc./OU=See www.entrust.net/legal-terms/OU=(c) 2009 Entrust, Inc. - for authorized use only/CN=Entrust Root Certification Authority - G2
i:/C=US/O=Entrust, Inc./OU=www.entrust.net/CPS is incorporated by reference/OU=(c) 2006 Entrust, Inc./CN=Entrust Root Certification Authority
上述代码展示了一个完整的链,由以下部分组成:
身份证书(服务器证书)
由 Entrust Certification Authority - L1K 颁发给 ssllabs.com
中间证书
由 Entrust Root Certification Authority - G2 颁发给 Entrust Certification Authority - L1K
中间证书
由 Entrust Root Certification Authority 颁发给 Entrust Root Certification Authority - G2
根证书(自签名证书)
由 Entrust Root Certification Authority 颁发给 Entrust Root Certification Authority
在此场景中,我们将链接所有提供的证书。运行工具的示例:
在此场景中,我们仅使用服务器证书,并利用它来检索其余必需的证书。然后,如上所述,我们将所有提供的证书组合起来。运行工具的示例:
为了创建一个有效的链,你必须向工具提供所有必要的证书(如果你为 -i|--in 参数设置了目录)。这些证书包括:
这一点非常重要,因为如果没有它们,你将无法确定链的起点和终点。
如果你只将单个证书文件作为
-i|--in的值,mkchain会自动下载所有必要的证书。
但是,如果你在使用 mkchain 生成后查看生成的链内部,你会发现其中没有根证书。
为什么呢?因为自签名的根证书不需要/不应该包含在 Web 服务器配置中。它们没有用处(客户端总是会忽略它们),而且它们还会带来轻微的性能(延迟)损失,因为它们会增加 SSL 握手的大小。
如果你想要将根证书添加到证书链中,请使用 --with-root 参数调用该工具。
mkchain 允许使用两种 认证路径:
在生成证书链时,mkchain 会显示包含证书信息(包括任何错误)的注释。
以下是所有可能的注释列表:
当缺少作为链起点的服务器证书时,会显示此消息。这是一种特殊情况,因为在这种情况下,mkchain 仅显示此信息后便会结束运行。服务器证书是正确创建链所需的唯一证书。没有此证书,将无法创建正确的链。
与此相反的情况——当找到有效的服务器证书时显示此消息。
当两个中间证书中的第一个未找到时,会显示此消息。该信息并未明确说明第二个中间证书也缺失,但另一方面它有助于确定服务器证书所签发的中间证书是否存在。此外,如果已提供第二个中间证书,也可能会显示此信息。
与上述类似,但涉及第二个中间证书。不过,仍有可能使用第二个认证路径正确创建链,例如,使用第一个中间证书并用主证书替换第二个。
此消息表示缺少一个或所有必需的中间证书,并在缺少根证书时显示。
此消息表示有效中间证书的数量。
缺少根证书被视为警告。当然,在服务器端配置证书时,不建议附加根证书,但如果你使用 mkchain 创建链,它会将链视为不完整,并显示关于链创建不正确的信息。
此消息并非报告错误,而是指明某些证书可能缺少 CN 字段(参见 example/google.com)。通用名称字段标识与证书关联的主机名。RFC3280 没有要求颁发者 DN 必须包含 CN。大多数 CA 会在颁发者 DN 中包含 CN,但有些则不会,例如 Equifax CA。
mkchain 使用外部工具,需要在运行前安装:
此工具运行于以下环境:
MacOS/FreeBSD:
pkg install getopt)greadlink 运行(通过 homebrew 安装)参见 此文件。
参见 此页面。
GPLv3 : http://www.gnu.org/licenses/
自由软件,太棒了!