

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 JCE 提取密钥 AWS CloudHSM
<a name="java-lib-configs-getencoded"></a>

Java 密码学扩展 (JCE) 使用的架构允许插入不同的加密实现。 AWS CloudHSM 发布了一个这样的 JCE 提供商，它可以将加密操作卸载到 HSM。对于大多数其他 JCE 提供商来说，要使用存储在 AWS CloudHSM 中的密钥，他们必须将您的密钥字节以明文形式提取 HSMs 到您的计算机内存中供他们使用。 HSMs 通常只允许将密钥提取为封装对象，而不允许以明文形式提取。但是，为了支持提供商间集成用例， AWS CloudHSM 允许使用选择加入配置选项来启用密钥字节的提取。

**重要**  
 AWS CloudHSM 无论何时指定 AWS CloudHSM 提供程序或 AWS CloudHSM 使用密钥对象，JCE 都会将操作卸载到任何时候。如果您希望在 HSM 内部进行操作，则无需以明文方式提取密钥。只有当您的应用程序由于第三方库或 JCE 提供程序的限制而无法使用安全机制（例如包装和解包密钥）时，才需要以明文提取密钥。

默认情况下， AWS CloudHSM JCE 提供程序允许提取**公钥**，以便与外部 JCE 提供程序配合使用。始终允许使用以下方法：


| 类 | 方法 | 格式 (getEncoded) | 
| --- | --- | --- | 
| EcPublicKey | getEncoded() | X.509 | 
|  | getW() | 不适用 | 
| RSAPublic钥匙 | getEncoded() | X.509 | 
|  | getPublicExponent() | 不适用 | 
| CloudHsmRsaPrivateCrtKey | getPublicExponent() | 不适用 | 

默认情况下， AWS CloudHSM JCE 提供程序不允许提取私钥或**私**钥的**密**钥字节。如果您的用例需要，则可以在以下条件下启用**私有**密钥或**机密**密钥的明文密钥字节提取功能：

1. 私有密钥和机密密钥的 `EXTRACTABLE` 属性设置为 **true**。
   + 默认情况下，私有密钥和机密密钥的 `EXTRACTABLE` 属性设置为 **true**。`EXTRACTABLE` 密钥是允许从 HSM 中导出的密钥。有关更多信息，请参阅《[客户端软件开发工具包 5](java-lib-attributes_5.md) 支持的 Java 属性》。

1. 私有密钥和机密密钥的 `WRAP_WITH_TRUSTED` 属性设置为 **false**。
   + `getEncoded`、`getPrivateExponent` 和 `getS` 不能与无法以明文导出的私有密钥一起使用。`WRAP_WITH_TRUSTED` 不允许您的私有密钥以明文从 HSM 中导出。有关更多信息，请参阅[使用可信密钥控制密钥解包](manage-keys-using-trusted-keys.md)。

# 允许 JCE 提供者从中提取私钥机密 AWS CloudHSM
<a name="get-encoded-take-out-private-keys"></a>

使用以下步骤允许 AWS CloudHSM JCE 提供者提取您的私钥机密。

**重要**  
此配置更改允许从 HSM 集群中以明文提取所有 `EXTRACTABLE` 密钥字节。为了提高安全性，您应该考虑使用[密钥包装方法](java-lib-supported_5.md)将密钥安全地从 HSM 中提取出来。这样可以防止无意中从 HSM 中提取密钥字节。

1. 使用以下命令从 JCE 中提取您的**私有**密钥或**机密**密钥：

------
#### [ Linux ]

   ```
   $ /opt/cloudhsm/bin/configure-jce --enable-clear-key-extraction-in-software
   ```

------
#### [ Windows ]

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\configure-jce.exe" --enable-clear-key-extraction-in-software
   ```

------

1. 一旦启用了明文密钥提取功能，就会启用以下方法将私有密钥提取到内存中。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/get-encoded-take-out-private-keys.html)

如果要恢复默认行为并且不允许 JCE 以明文导出密钥，请运行以下命令：

------
#### [ Linux ]

```
$ /opt/cloudhsm/bin/configure-jce --disable-clear-key-extraction-in-software
```

------
#### [ Windows ]

```
PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\configure-jce.exe" --disable-clear-key-extraction-in-software
```

------