<ph type="x-smartling-placeholder"></ph>
您正在查看 Apigee Edge 文档。
转到
Apigee X 文档。 信息
本文档介绍了如何创建、修改和删除 Edge 的密钥库和信任库 适用于 Private Cloud 4.17.09 及更低版本。
密钥库和信任库简介
密钥库和信任库定义了用于 TLS 的安全证书的存储库 加密。两者之间的主要区别在于它们在 TLS 握手中的使用位置 过程:
- 密钥库包含一个 TLS 证书和私钥,
实体。
在单向 TLS 中,当客户端连接到服务器上的 TLS 端点时,服务器的密钥库 向客户端提供服务器的证书(公共证书)。然后,客户端会验证 Symantec 或 VeriSign 等证书授权机构颁发的证书。
在双向 TLS 中,客户端和服务器都维护一个拥有自己的证书和 用于相互身份验证的私钥。 - truststore 包含用于验证以
是 TLS 握手的一部分。
在单向 TLS 中,如果证书是由有效 CA 签名的,则不需要信任库。如果 TLS 客户端收到的证书由有效的 CA 签名,然后该客户端发出请求 对证书进行身份验证TLS 客户端通常使用信任库来验证 从 TLS 服务器接收的自签名证书,或未由 受信任的 CA。在这种情况下,客户端会使用 信任。然后,当客户端收到服务器证书时,传入证书将 根据其信任库中的证书进行验证。
例如,TLS 客户端会连接到 TLS 服务器,其中服务器使用自签名 证书。由于它是自签名证书,因此客户端无法使用 CA 对其进行验证。 相反,客户端会将服务器的自签名证书预加载到其信任库中。然后, 当客户端尝试连接到服务器时,客户端会使用其信任库 验证从服务器收到的证书。
对于双向 TLS,TLS 客户端和 TLS 服务器都可以使用信任库。信任库 当 Edge 充当 TLS 服务器时,在执行双向 TLS 时是必需的。
证书可以由证书授权机构 (CA) 颁发,也可以由 密钥。如果您有权访问某个 CA,请按照您的 用于生成密钥和颁发证书的 CA。如果您无权访问 CA,则可以 使用众多公开提供的免费工具之一生成自签名证书,例如 openssl.
实现 Edge 上的密钥库和信任存储区
在 Edge 上,密钥库包含一个或多个 JAR 文件,其中 JAR 文件包含:
- PEM 格式的 TLS 证书 - 由证书授权机构签名的证书 证书链、证书链(其中最后一个证书由 CA 签名)或自签名证书 证书。
- 以 PEM 文件形式提供的私钥。Edge 最多支持 2048 位的密钥大小。口令为 可选属性。
信任库与密钥库类似,只不过它仅包含 PEM 文件形式的证书,但没有 私钥。
如果证书是证书链的一部分,则密钥库/信任库必须包含 或单个 PEM 文件。如果您使用单个文件,则 证书必须按顺序排列,如果文件中的第一个证书是用于 TLS,则遵循 证书链传递给 CA 证书您必须插入一个空行, 每个证书
Edge 提供了一个用于创建密钥库和信任库的 API。实际的 API 是 都一样不同之处在于,创建密钥库时,您需要传递一个包含 证书和私钥。创建信任库时,您仅将证书作为 PEM 文件传递。
关于 证书和密钥文件
本文档中的示例展示了定义为 PEM 文件的 TLS 证书和密钥, X.509 格式的文件如果您的证书或私钥未在 PEM 文件中定义,则可以转换 转换为 PEM 文件。
不过,许多 .crt 文件和 .key 文件已采用 PEM 格式。如果这些文件是文本格式 文件,并包含在以下文件中:
-----BEGIN CERTIFICATE----- -----END CERTIFICATE-----
或者:
-----BEGIN ENCRYPTED PRIVATE KEY----- -----END ENCRYPTED PRIVATE KEY-----
然后,这些文件就与 PEM 格式兼容,您可以在密钥库或 信任库,而不将其转换为 PEM 文件。
如果您有证书链,并且希望在密钥库或信任库中使用该证书链,则 您可以将所有证书合并到一个 PEM 文件中,并在每个证书之间另起一行。通过 证书必须按顺序排列,并且最后一个证书必须是根证书或中间证书 由根证书签名:
-----BEGIN CERTIFICATE----- (Your Primary TLS certificate) -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- (Intermediate certificate) -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- (Root certificate or intermediate certificate signed by a root certificate) -----END CERTIFICATE-----
获取有关现有密钥库的详细信息
使用列出密钥库,检查您的环境中是否存在任何现有的密钥库 和 Truststores API:
curl -X GET \ https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores \ -u email:password
对于云客户,无论是在 测试和生产环境。对于上述两种情况,您应该都会看到此次调用的结果 环境:
[ "freetrial" ]
您可以使用此默认密钥库测试 API,并将 API 推送到生产环境, 在部署到生产环境之前,使用您自己的证书和密钥创建自己的密钥库。
对于 Private Cloud 客户,在您创建第一个数组之前,返回的数组为空 密钥库。
使用 检查密钥库的内容 获取密钥库或信任库 API。对于云客户,您应该会看到单个服务器 TLS 证书 - Apigee Edge 为免费试用账号提供的默认证书。
curl https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores/freetrial \ -u email:password
响应应如下所示:
{ "certs" : [ "wildcard.apigee.net.crt" ], "keys" : [ "freetrial" ], "name" : "freetrial" }
您还可以在 Edge 管理界面中查看此信息:
- 访问 https://enterprise.apigee.com(云)或
http://<ms-ip>:9000
(本地),登录 Edge 管理界面。 其中<ms-ip>
是 IP 地址 管理服务器节点的地址。 - 在边缘管理界面菜单中,依次选择管理 >TLS 证书中所述。
获取 TLS 证书详情
您可以使用 从密钥库或信任存储区 API 获取证书详情,以 (如失效日期和颁发者)。首先,从 你感兴趣的主题本示例提取名为 “freetrial”。
curl https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores/freetrial \ -u email:password
示例响应:
{ "certs" : [ "wildcard.apigee.net.crt" ], "keys" : [ "freetrial" ], "name" : "freetrial" }
然后,使用 certs 属性的值来获取证书的详细信息:
curl https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores/freetrial/certs/wildcard.apigee.net.crt \ -u email:password
示例响应:
{ "certInfo" : [ { "expiryDate" : "Wed, 23 Apr 2014 20:50:02 UTC", "isValid" : "Yes", "issuer" : "CN=Go Daddy Secure Certificate Authority - G2, OU=http://certs.godaddy.com/repository/, O="GoDaddy.com, Inc.", L=Scottsdale, ST=Arizona, C=US", "subject" : CN=*.example.apigee.net, OU=Domain Control Validated", "subjectAlternativeNames" : ["*.example.apigee.net","*.example.apigee.net" ], "validFrom" : "Tue, 15 Apr 2014 09:17:03 UTC", "version" : 3 } ], "name" : "example.apigee.net.crt" }
您还可以在 Edge 管理界面中查看此信息:
- 访问 https://enterprise.apigee.com,登录 Edge 管理界面 (cloud)
或
http://<ms-ip>:9000
(本地) 其中<ms-ip>
是 IP 地址 管理服务器节点的地址。 - 在边缘管理界面菜单中,依次选择管理 >TLS 证书。
在 Edge 界面中,您可以指定 Edge 指示证书正在提前多久 过期。默认情况下,界面会突出显示计划在未来 10 天内到期的所有证书 天。
创建密钥库
密钥库特定于贵组织中的环境,例如测试或生产 环境因此,如果您要在部署密钥库之前在测试环境中测试密钥库, 部署到生产环境,则必须在这两种环境中创建。
创建密钥库的过程分为两个步骤:
- 创建包含证书和私钥的 JAR 文件。
- 创建密钥库并上传 JAR 文件。
创建 JAR 文件 包含您的证书和私钥
使用您的私钥、证书和清单创建 JAR 文件。JAR 文件必须 包含以下文件和目录:
/META-INF/descriptor.properties myCert.pem myKey.pem<ph type="x-smartling-placeholder">
在包含密钥对和证书的目录中,创建一个名为
/META-INF
。然后,创建一个文件
名为“descriptor.properties
”的地区:
/META-INF
替换为以下内容
内容:
certFile={myCertificate}.pem keyFile={myKey}.pem
生成包含密钥对和证书的 JAR 文件:
jar -cf myKeystore.jar myCert.pem myKey.pem
将 descriptor.properties 添加到您的 JAR 文件中:
jar -uf myKeystore.jar META-INF/descriptor.properties
创建密钥库并上传 JAR 文件
要在某个环境中创建密钥库,只需在 创建 Keystore 或 Truststore API。名称只能包含字母数字字符:
curl -X POST -H "Content-Type: text/xml" \ https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores \ -d '<KeyStore name="myKeystore"/>' -u email:password
示例响应:
{ "certs" : [ ], "keys" : [ ], "name" : "myKeystore" }
在环境中创建命名密钥库后,您可以上传 包含证书和私钥的 将 JAR 文件上传到密钥库 API:
curl -X POST -H "Content-Type: multipart/form-data" \ -F file="@myKeystore.jar" -F password={key_pass} \ "https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores/{myKeystore}/keys?alias={key_alias}" \ -u email:password
其中,-F
选项指定了
JAR 文件的路径。
在此调用中,您指定两个查询参数:
alias
- 标识 密钥存储区中的证书和密钥创建虚拟主机时,您需要引用 证书和密钥的别名。password
- 用于登录 私钥。如果私钥没有密码,则省略此参数。
验证您的密钥库是否正确上传:
curl https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores/myKeystore \ -u email:password
示例响应:
{ "certs" : [ "myCertificate" ], "keys" : [ "myKey" ], "name" : "myKeystore" }
创建信任库
用于创建信任库的 API 与用于创建密钥库的 API 相同。通过 唯一的区别是将证书文件作为 PEM 文件而不是 JAR 文件进行传递。
如果证书是证书链的一部分,则您必须单独上传证书链中的所有证书
或创建一个包含所有证书的文件
每个证书最终证书通常由证书颁发者签名。对于
例如,在信任库中,您上传客户端证书 client_cert_1
和客户端证书
颁发者的证书 ca_cert
。
在双向 TLS 身份验证期间,当服务器发送
client_cert_1
传递给客户端,具体如下:
是 TLS 握手过程的一部分。
或者,您还有一个由同一证书签名的第二个证书 client_cert_2
,
ca_cert
。不过,您无需
将 client_cert_2
上传到
受信任证书存储区。信任库仍包含 client_cert_1
和 ca_cert
。
当服务器在 TLS 握手过程中传递 client_cert_2
时,
请求成功。这是因为在 client_cert_2
但该证书是由信任库中存在的证书签名的。如果移除 CA
证书ca_cert
则 TLS 验证会失败。
使用创建 Keystore 或 Truststore,即用于创建密钥库的同一 API:
curl -X POST -H "Content-Type: text/xml" -d \ '<KeyStore name="myTruststore"/>' \ https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores \ -u email:password
使用 将证书上传到 Truststore API:
curl -X POST -H "Content-Type: multipart/form-data" -F file="@trust.pem" \ https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores/myTruststore/certs?alias=myTruststore \ -u email:password
其中,-F
选项指定了
PEM 文件的路径。
删除密钥库或信任库
您可以使用 删除密钥库或 Truststore API:
curl -X DELETE \ https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores/myKeystoreName \ -u email:password
示例响应:
{ "certs" : [ ], "keys" : [ ], "name" : "myKeystoreName" }
如果您删除了虚拟主机或目标正在使用的密钥库或信任库 端点/目标/服务器,通过虚拟主机或目标端点/目标服务器进行的所有 API 调用 会失败...