V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
BraveXaiver
V2EX  ›  程序员

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

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

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

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

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

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

    谢谢!
    4 条回复    2024-09-01 15:43:38 +08:00
    ZZ74
        1
    ZZ74  
       27 天前
    Java 开发的客户端想要与远端服务器建立 SSL 连接,就会提供一个 keystore
    这一句 9 错了啊,客户端又不是一定要 keystore

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

    服务器的 keystore 保存了只有服务器才有的私钥和公钥,进行 https 连接握手时,客户端连接到服务端,服务端会先把自己的公钥发给客户端,然后客户端用这个公钥进行加密操作。所以客户端的 keystore 不需要保存任何私钥
    BraveXaiver
        3
    BraveXaiver  
    OP
       27 天前
    @ZZ74
    @henix 嗯,确实说少了。我是说那种需要双向 SSL 验证的 API 。
    Shoukaku
        4
    Shoukaku  
       26 天前 via iPhone
    当然是可以的,但是现实中为了提高安全性,加密和认证的密钥不应该混用。而且你这是典型的本地对称密钥该干的事情,没必要为了省一个密钥,搞这么复杂,KeyStore 可以存 SecretKey 。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2374 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 570ms · UTC 15:30 · PVG 23:30 · LAX 08:30 · JFK 11:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.