为 Private Cloud 4.17.09 及更低版本创建密钥库和信任库

<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 管理界面中查看此信息:

  1. 访问 https://enterprise.apigee.com(云)或 http://<ms-ip>:9000(本地),登录 Edge 管理界面。 其中 <ms-ip> 是 IP 地址 管理服务器节点的地址。
  2. 在边缘管理界面菜单中,依次选择管理 >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=&quot;GoDaddy.com, Inc.&quot;, 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 管理界面中查看此信息:

  1. 访问 https://enterprise.apigee.com,登录 Edge 管理界面 (cloud) 或 http://<ms-ip>:9000(本地) 其中 <ms-ip> 是 IP 地址 管理服务器节点的地址。
  2. 在边缘管理界面菜单中,依次选择管理 >TLS 证书

在 Edge 界面中,您可以指定 Edge 指示证书正在提前多久 过期。默认情况下,界面会突出显示计划在未来 10 天内到期的所有证书 天。

创建密钥库

密钥库特定于贵组织中的环境,例如测试或生产 环境因此,如果您要在部署密钥库之前在测试环境中测试密钥库, 部署到生产环境,则必须在这两种环境中创建。

创建密钥库的过程分为两个步骤:

  1. 创建包含证书和私钥的 JAR 文件。
  2. 创建密钥库并上传 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_2ca_cert。不过,您无需 将 client_cert_2 上传到 受信任证书存储区。信任库仍包含 client_cert_1ca_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 调用 会失败...