> For the complete documentation index, see [llms.txt](https://bohans.gitbook.io/ji-chu/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bohans.gitbook.io/ji-chu/spring/group-1/spring-cloud/spring-cloud-config/bao-hu-min-gan-pei-zhi-xin-xi.md).

# 保护敏感配置信息

在默认情况下，Spring Cloud Config 服务器端在应用程序配置文件中以纯文本格式存储所有属性，包括像数据库凭据这样的敏感信息。

Spring Cloud Config 可以让我们轻松加密敏感属性。Spring Cloud Config 支持使用<mark style="color:blue;">**对称加密密钥**</mark>和<mark style="color:blue;">**非对称加密密钥**</mark>。

## 1. 创建对称加密密钥

对于 Spring Cloud Config 服务器端，对称加密密钥是一个由字母组成的字符串，你可以选择在 Config 服务器端的 <mark style="color:blue;">**application.yml**</mark> 文件中设置它，也可以选择通过操作系统环境变量 <mark style="color:blue;">**ENCRYPT\_KEY**</mark> 将它传递给服务。

{% hint style="info" %} <mark style="color:blue;">**对称密钥的长度应该是 12 个或更多个字符，最好是一个随机的字符集。**</mark>
{% endhint %}

```yaml
encrypt:
  key: 123456789abcdef
```

## 2. 加密/解密

在启动 Spring Cloud Config 实例时，Spring Cloud Config 将检测到，环境变量 ENCRYPT\_KEY 或 application.yml 文件中的属性已设置，并自动将两个新端点 <mark style="color:blue;">**/encrypt**</mark> 和 <mark style="color:blue;">**/decrypt**</mark> 添加到 Spring Cloud Config 服务。

{% hint style="info" %}
**在调用 /encrypt 或 /decrypt 端点时，需要确保对这些端点进行&#x20;**<mark style="color:blue;">**POST**</mark>**&#x20;请求。**

<img src="https://3484936666-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fkc3qks6b4rvNPb2C0khl%2Fuploads%2F8QcbvkTdduBdc7RWZtXn%2Fimage.png?alt=media&amp;token=68ca8127-3e11-4355-90c2-a5cae9bb4b75" alt="" data-size="original">    ![](https://3484936666-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fkc3qks6b4rvNPb2C0khl%2Fuploads%2Fgas7CW7PRo146zRfVZsJ%2Fimage.png?alt=media\&token=532227c3-6789-4add-b347-830feb987eb7)
{% endhint %}

## 3. 使用加密属性

```yaml
spring:
  datasource:
    password: '{cipher}4277f8d804f0e2286530d3855e8aceab5c8d75ac558bd731bbab45610f75f2a7'
```

> 在上面的这种配置下，REST 接口可以获得的便是解密后的信息，根本没有起到保密的效果！
>
> 此时，只能够保证敏感信息在 Git 仓库中的保密性，使得敏感信息能够在 Git 服务器能安全共享。
>
> <img src="https://3484936666-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fkc3qks6b4rvNPb2C0khl%2Fuploads%2FQHqyk2PXDr5V8GQ2mJbv%2Fimage.png?alt=media&amp;token=485c83bc-57d3-407f-95c2-dd636ac3b490" alt="" data-size="original"><br>
>
> 增加配置 <mark style="color:orange;">**spring.cloud.config.server.encrypt.enabled=false**</mark>，可以解决上述问题，此时需要将解密的工作**交由 Config Client 完成**：
>
> ![](https://3484936666-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fkc3qks6b4rvNPb2C0khl%2Fuploads%2FnI4DSI92BfpDjznPpMuI%2Fimage.png?alt=media\&token=3b773da7-8b4c-45bd-a97f-ec78913231c3)
