赞
踩
springcloud的配置中心读取远程的配置仓库中文件,需要将远程仓库中的文件加密,避免密码泄露。
网上的文章也是抄来抄去,或者是没有注意细节,导致一堆的坑
命令如下:
keytool -genkey -alias tt_encrypt -keyalg RSA -keysize 1024 -keystore tt-encrypt.jks -validity 36500 -keypass tt_jiami -storepass tt_jiami
这里的
-alias选项为别名,-keypass和-storepass为密码选项,-validity为配置jks文件的过期时间(单位:天)
输入指令后会提醒你,输入姓名,公司名称等,这个随便你写了
生成结束后会提醒你
生成的证书 使用的 1024 位 RSA 密钥 被视为存在安全风险。此密钥大小将在未来的更新中被禁用。
JKS 密钥库使用专用格式。建议使用 “keytool -importkeystore -srckeystore tt-encrypt.jks -destkeystore tt-encrypt.jks -deststoretype pkcs12” 迁移到行业标准格式 PKCS12
你复制提醒的指令,输入指令,即可。
除了配置远程的仓库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
0.引用jar包spring-boot-starter-security,注意这个jar包的名称
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
1.运行eureka和config,接着在浏览器上访问
127.0.0.1:8081/encrypt/status
但是总是会自动跳转到
127.0.0.1:8081/login
登录页面。
这个有俩种方式解决:
1.在application.yml文件中增加配置
spring:
security:
user:
name: root
password: 111111
当你在访问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();
}
}
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-rsa</artifactId>
</dependency>
运行config后,访问http://127.0.0.1:8081/encrypt/status
还是提示错误
java.security.InvalidKeyException: Illegal key size
需要去oracle的官网下载JCE加密扩展
jdk8的下载地址是下载JDK8的JCE加密扩展
加压后放到你电脑上安装jdk目录下的jre/lib/security目录下。
我目前办公电脑是macbook,查看jdk的安装目录命令是:
/usr/libexec/java_home -V
那么我就直接复制解压文件到目录下,注意macbook的电脑要先有权限操作此目录,没权限,那么使用指令sudo chmod -R 777 文件目录
/Library/Java/JavaVirtualMachines/jdk1.8.0_271.jdk/Contents/Home
完成之后,再次启动config,然后浏览器访问127.0.0.1:8081/encrypt/status
会返回
{“status”:“OK”}
或者使用curl命令访问
curl http://127.0.0.1:8081/encrypt/status
加密某个密码,使用指令
curl -X POST http://127.0.0.1:8081/encrypt -d dushan1234
得到结果
解密的命令是
curl -X POST http://127.0.0.1:8081/decrypt -d AIA87gNUfMKQSQ/hOR2RDZbjismUm9t5gzP0x9RHjhNMmkurWYnG/Lq9JkdcLr3lSKmLz9sY6Fu0YZHUEvhn3Lk4/NDmL5dcyYCqDm/Cqhx1TPqmfWoXp0H5Izqz0jy7CQ5QBUWZZXgyyNVALPK+0fHZRAFOgVZ0kZcF45IZSXgibyefY9Xvbw1WblgXD+JTVSpoqg18MSjV9f5/0Bf3Um6I
仔细看上面这张图,注意一点,我加密的时候,生成的结果,最后一位是%,我之前解密的时候,输入的秘钥都是有这个%,然后congfig的后台不断的提示我
java.lang.IllegalArgumentException: Illegal base64 character 25
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
当时找问题找了很久,才反应过来,这个生成秘钥的时候,最后一位的%不是秘钥的内容,所以将最后一位的%删除之后,再次解密,成功。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。