Spring Cloud Config Server加密问题

问题描述 投票:0回答:1

我们有一个Pivotal Cloud Foundry服务器,该服务器配置了带有加密密钥的Spring配置服务器。在相应的属性文件中(通过github),我们为一些简单的属性加上了{cipher}前缀,并且能够在应用程序中很好地获得这些值。但是我们最近注意到的挑战是,当我们有一个需要加密的base64数据时,spring加密会在base64数据的末尾截断尾随等号。而且,当我们的应用程序读取此数据时,由于缺少有效的base64(末尾的填充字符(等号)),因此无法解析该数据。我们尝试使用反斜杠转义等号,但仍然没有运气。我们只是看到两个反斜线,因此想知道是否有任何建议可以解决此问题。谢谢!

pivotal-cloud-foundry spring-cloud-config spring-cloud-config-server
1个回答
0
投票

据我所知,这里的问题似乎与curl的用法有关。通过运行,我可以复制您看到的问题:

spring decrypt --key @${HOME}/server_rsa_no_eol.key "$(curl -H "Authorization: $(cf oauth-token)" https://config-server.example.com/encrypt -s -d 'VGVzdC0=')"

这将使用curl到达加密端点并获取结果,并立即使用spring decrypt将其解密。如您所指示,这将返回VGVzdC0

这似乎是一个卷曲问题,因为我可以在https://httpbin.org/post上发表相同的帖子,并且得到的结果相同,VGVzdC0而没有=

$ curl https://httpbin.org/post --data 'VGVzdC0='
{
  ...
  "form": {
    "VGVzdC0": ""
  },
  ...

如果我对=字符进行URL编码,则有效。

$ curl https://httpbin.org/post --data 'VGVzdC0%3D'
{
  ...
  "form": {
    "VGVzdC0=": ""
  },
  ...

您也可以通过使用curl使--data-urlencode进行url编码,但是有一个陷阱。您必须在值前加上=。所以这也有效

$ curl https://httpbin.org/post --data-urlencode '=VGVzdC0='
{
  "args": {},
  "data": "",
  "files": {},
  "form": {
    "VGVzdC0=": ""
  },
...

从curl手册页:

  --data-urlencode <data>
          (HTTP) This posts data, similar to the other -d, --data options with the exception that this performs URL-encoding.

          To be CGI-compliant, the <data> part should begin with a name followed by a separator and a content specification. The <data> part can be passed to curl using one of the following
          syntaxes:

          content
                 This will make curl URL-encode the content and pass that on. Just be careful so that the content doesn't contain any = or @ symbols, as that will then make the syntax match
                 one of the other cases below!

          =content
                 This will make curl URL-encode the content and pass that on. The preceding = symbol is not included in the data.

键是最后一部分=content。这将使curl url编码内容,并且不包含前缀=

如果重复上面的测试,则会得到预期的结果VGVzdC0=

spring decrypt --key @${HOME}/server_rsa_no_eol.key "$(curl -H "Authorization: $(cf oauth-token)" https://config-server.example.com/encrypt -s --data-urlencode '=VGVzdC0=')"

此外,您还可以使用easy选项并安装Spring Boot CLI + Spring Cloud Extension。然后,您只需输入spring encrypt --key @${HOME}/server_rsa_no_eol.key 'VGVzdC0=',便会获得正确的值。那确实意味着您需要在本地计算机上的密钥副本,您可能有也可能没有。

brew install springboot
spring install org.springframework.cloud:spring-cloud-cli:2.2.1.RELEASE
© www.soinside.com 2019 - 2024. All rights reserved.