当前位置:   article > 正文

springcloud配置中心config加密配置仓库yml文件,踩坑记录_生成的证书 使用的 1024 位 dsa 密钥 被视为存在安全风险。此密钥大小将在未来的

生成的证书 使用的 1024 位 dsa 密钥 被视为存在安全风险。此密钥大小将在未来的

springcloud的配置中心读取远程的配置仓库中文件,需要将远程仓库中的文件加密,避免密码泄露。
网上的文章也是抄来抄去,或者是没有注意细节,导致一堆的坑

keytools生成jks秘钥

命令如下:

keytool -genkey -alias tt_encrypt -keyalg RSA -keysize 1024 -keystore tt-encrypt.jks -validity 36500 -keypass tt_jiami -storepass tt_jiami
  • 1

这里的
-alias选项为别名,-keypass和-storepass为密码选项,-validity为配置jks文件的过期时间(单位:天)
输入指令后会提醒你,输入姓名,公司名称等,这个随便你写了

生成结束后会提醒你

生成的证书 使用的 1024 位 RSA 密钥 被视为存在安全风险。此密钥大小将在未来的更新中被禁用。
JKS 密钥库使用专用格式。建议使用 “keytool -importkeystore -srckeystore tt-encrypt.jks -destkeystore tt-encrypt.jks -deststoretype pkcs12” 迁移到行业标准格式 PKCS12

你复制提醒的指令,输入指令,即可。
在这里插入图片描述

springcloud config的yml配置文件

除了配置远程的仓库url ,账户密码之外。
还需要配置你本地生成的jks文件位置,加密的key

spring:
	cloud:
		config:
			server:
				encrypt:
					enable: true

#加密代码
encrypt:
  key-store:
    location: file:${HOME}/home/jks/tt-encrypt-old.jks
    alias: tt_encrypt
    password: tt_jiami
    secret: tt_jiami
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

config加密和解密

springcloud config 401报错

0.引用jar包spring-boot-starter-security,注意这个jar包的名称

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
  • 1
  • 2
  • 3
  • 4

1.运行eureka和config,接着在浏览器上访问

127.0.0.1:8081/encrypt/status
  • 1

但是总是会自动跳转到

127.0.0.1:8081/login
  • 1

登录页面。

在这里插入图片描述
这个有俩种方式解决:
1.在application.yml文件中增加配置

spring:
	security:
    	user:
      		name: root
      		password: 111111
  • 1
  • 2
  • 3
  • 4
  • 5

当你在访问127.0.0.1:8081/encrypt/status的时候,输入上面的账号密码即可。

但是总觉得输入密码不方便,官网上提供了一种避免登录的方法。
但是此方法验证失败。

@Configuration
@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable().authorizeRequests()
        .anyRequest().authenticated().and()
        .httpBasic();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

更换jar包,完成加密解密

		<dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-rsa</artifactId>
        </dependency>
  • 1
  • 2
  • 3
  • 4

运行config后,访问http://127.0.0.1:8081/encrypt/status 还是提示错误

java.security.InvalidKeyException: Illegal key size
  • 1

需要去oracle的官网下载JCE加密扩展
jdk8的下载地址是下载JDK8的JCE加密扩展
加压后放到你电脑上安装jdk目录下的jre/lib/security目录下。
我目前办公电脑是macbook,查看jdk的安装目录命令是:

/usr/libexec/java_home -V
  • 1

在这里插入图片描述
那么我就直接复制解压文件到目录下,注意macbook的电脑要先有权限操作此目录,没权限,那么使用指令sudo chmod -R 777 文件目录

/Library/Java/JavaVirtualMachines/jdk1.8.0_271.jdk/Contents/Home
  • 1

完成之后,再次启动config,然后浏览器访问127.0.0.1:8081/encrypt/status会返回
{“status”:“OK”}

或者使用curl命令访问

curl http://127.0.0.1:8081/encrypt/status
  • 1

在这里插入图片描述
加密某个密码,使用指令

curl -X POST http://127.0.0.1:8081/encrypt -d dushan1234
  • 1

得到结果

解密的命令是

curl -X POST http://127.0.0.1:8081/decrypt -d AIA87gNUfMKQSQ/hOR2RDZbjismUm9t5gzP0x9RHjhNMmkurWYnG/Lq9JkdcLr3lSKmLz9sY6Fu0YZHUEvhn3Lk4/NDmL5dcyYCqDm/Cqhx1TPqmfWoXp0H5Izqz0jy7CQ5QBUWZZXgyyNVALPK+0fHZRAFOgVZ0kZcF45IZSXgibyefY9Xvbw1WblgXD+JTVSpoqg18MSjV9f5/0Bf3Um6I
  • 1

在这里插入图片描述
仔细看上面这张图,注意一点,我加密的时候,生成的结果,最后一位是%,我之前解密的时候,输入的秘钥都是有这个%,然后congfig的后台不断的提示我

java.lang.IllegalArgumentException: Illegal base64 character 25
  • 1
2021-02-02 15:21:18.185 ERROR [http-nio-8081-exec-2] [org.springframework.cloud.config.server.encryption.EncryptionController][134] Cannot decrypt key:application, value:AIAwbQbtizbkHya4OhEOKVQPxPqNn0kJFllzjbQpAledAsAAq85BZ4pnYRfG1ll+X36r9eu2jvHvRkFTDsMgW+Juqd0JtbSA8Oupn1opi+eqh5kxq93U8ekHCztP+kIXTtS2YSj/D039Xi9yE92DKJLWCBzmLrG89VErs0Y57zSqUDu7qH5Eh2M/iUHuhZdjUi+oIRU5l55wfDXjEMzPpA26% 
java.lang.IllegalArgumentException: Illegal base64 character 25
	at java.util.Base64$Decoder.decode0(Base64.java:714)
	at java.util.Base64$Decoder.decode(Base64.java:526)
	at org.springframework.util.Base64Utils.decode(Base64Utils.java:59)
	at org.springframework.security.rsa.crypto.RsaSecretEncryptor.decrypt(RsaSecretEncryptor.java:165)
	at org.springframework.cloud.config.server.encryption.EncryptionController.decrypt(EncryptionController.java:129)
	at 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

当时找问题找了很久,才反应过来,这个生成秘钥的时候,最后一位的%不是秘钥的内容,所以将最后一位的%删除之后,再次解密,成功。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/155005
推荐阅读
相关标签
  

闽ICP备14008679号