1.JCE 加密
JCE(Java Cryptography Extension)是一組包,它們提供用於加密、密鑰生成和協商以及 Message Authentication Code(MAC)算法的框架和實現。
它提供對對稱、不對稱、塊和流密碼的加密支持,它還支持安全流和密封的對象。它不對外出口,用它開發完成封裝後將無法調用。
2. JCE 配置過程
-
根據自己的 JDK 版本去下載相對應的壓縮包,我用的 jdk 1.8 ,點我下載。
-
下載下來的 zip 包解壓,得到 local_policy.jar 和 US_export_policy.jar。
-
先 備份 javahome 路徑下 jre/lib/security 的 local_policy.jar 和 US_export_policy.jar,然後把下載的兩個文件複製到該路徑下。
-
spring cloud 配置中心的服務,查看加密的狀態:
localhost:10000/encrypt/status
這個時候系統返回的 報錯信息是:{ "description": "No key was installed for encryption service", "status": "NO_KEY" }
-
在 yml 中配置上祕鑰:
encrypt: key: 123
重啓服務,然後重新驗證,返回結果:
{ "status": "OK" }
-
加密
curl -X POST http:/localhost:10000/encrypt -d mysqladmin返回的加密信息:8354721c6ae911dbb71866e88612bef9beab3a035d41b703fe9ecc4014237f8f
-
解密
curl -X POST http:/localhost:10000/decrypt -d 8354721c6ae911dbb71866e88612bef9beab3a035d41b703fe9ecc4014237f8f返回解密信息:mysqladmin
-
在配置文件中使用加密信息:
spring: durid: password: '{cipher}8354721c6ae911dbb71866e88612bef9beab3a035d41b703fe9ecc4014237f8f'
遇到的問題
-
Mac OS 要怎麼配置 JCE?
mac 的 javaHome/jre/lib/security 下面並沒有 local_policy.jar 和 US_export_policy.jar。 如下圖所示
把下載的兩個 jar 包直接替換到 unlimited 中的兩個 jar 包。但是之前試了好久一直都沒有效果, 然後又突然好了……不懂不懂 -
加密到靠不靠譜?
在配置加密之後, 重新啓動服務, 服務是可以完成正常的 CRUD 的,這也 意味着我們的加密是完全可用的。但是如果我直接讀取數據的密碼呢?
@RestController @RefreshScope @Slf4j public class TestController { @Autowired UserService userService; @Value("${spring.durid.password}") private String hello; @GetMapping("/hello") public String from() { return this.hello; } @PostMapping("/add/user") public User addUser(@RequestBody User user) { log.info("user={}", user); return userService.insert(user); } }
訪問 hello 方法,返回的數據庫密碼是解密的。。。突然又迷失了方向,我是在幹什麼? 不管我用什麼祕鑰, 用什麼密碼,都可以被服務端一部獲取到服務密碼。算了, 希望他們不要去 直接獲取數據庫密碼:(