可以利用 Java 的 Keystore 做一些数据加解密工作吗?

109 天前
 BraveXaiver
RT ,Java 开发的客户端想要与远端服务器建立 SSL 连接,就会提供一个 keystore ,这个 keystore 显然其使用证书的私钥,否则应该是无法完成 SSL 认证的。

而这个证书的公钥又是可以暴露的,或者说是必须要公开的。

所以我想的是,利用这个公钥去做加密,将加密的内容写在这个应用的配置文件里,再在程序启动的时候利用 keystore 去解密。这样就不用引入额外的密钥。

但我网上搜了一下,好像完全没有这样的讨论。是我的理解出了偏差,这个是做不到的吗?

如果可以,这里( 1 )利用 keystore 中的私钥去做解密,大家知道 java 代码该怎么写吗( 2 )利用公钥去加密这两部分,大家知道咋写吗?

谢谢!
1184 次点击
所在节点    程序员
4 条回复
ZZ74
108 天前
Java 开发的客户端想要与远端服务器建立 SSL 连接,就会提供一个 keystore
这一句 9 错了啊,客户端又不是一定要 keystore

利用这个公钥去做加密,将加密的内容写在这个应用的配置文件里,再在程序启动的时候利用 keystore 去解密。这样就不用引入额外的密钥
你这是想干啥?本地加解密? 那你 keystore 的密码呢,启动时要解密 存本地还是启动时从服务器获取? 要是公私都在本地 用对称加密不就好了。 要是 keystore 放客户端...我不知道该怎么描述。
henix
107 天前
感觉你对 https 证书有一些误解。
“利用这个公钥去做加密,将加密的内容写在这个应用的配置文件里,再在程序启动的时候利用 keystore 去解密”
这个说法没错,但能这么做的前提是,这个程序正好是一个 https 网站的服务端

服务器的 keystore 保存了只有服务器才有的私钥和公钥,进行 https 连接握手时,客户端连接到服务端,服务端会先把自己的公钥发给客户端,然后客户端用这个公钥进行加密操作。所以客户端的 keystore 不需要保存任何私钥
BraveXaiver
107 天前
@ZZ74
@henix 嗯,确实说少了。我是说那种需要双向 SSL 验证的 API 。
Shoukaku
107 天前
当然是可以的,但是现实中为了提高安全性,加密和认证的密钥不应该混用。而且你这是典型的本地对称密钥该干的事情,没必要为了省一个密钥,搞这么复杂,KeyStore 可以存 SecretKey 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1068961

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX