java - 如何将程序密码存储在 OS keystore 中?

标签 java keystore

我目前正在 Mac 上开发 Java 应用程序。我知道有来自 Apple 的 keystore ,我想在该 keystore 中安全地存储密码。

根据 Apple 开发人员的说法,我可以通过 keyStore = KeyStore.getInstance("KeychainStore", "Apple"); 获取 keystore 。

现在我的问题是:如何存储密码以及如何再次取回密码?
我已经阅读了很多关于 keystore 的内容,但我不知道实现会是什么样子。

以及如何从 Windows/Linux 获取内置 keystore ?

最佳答案

java.security.KeyStore不是 创建用于处理密码。它是加密 key 和证书的存储工具。虽然您可以尝试使用它来存储密码,因为它可以存储私钥,但我建议您不要这样做,因为 KeyStore 的 API 很麻烦并且不是为您的用例设计的。
https://docs.oracle.com/javase/8/docs/api/java/security/KeyStore.html

如何在 Windows、Linux 或 macOS 中存储密码

你需要的是 Keychain在 macOS 和其他操作系统中的类似工具中。由于您还询问 Windows 和 Linux,您可能对 Java Keyring 感兴趣。图书馆。它将密码存储在:

  • Keychain macOS
  • Credential Manager在 Windows
  • DBus Secret Service在 GNOME 上

  • 以下是如何使用它:
    public static void main(String[] args) throws Exception {
        Keyring keyring = Keyring.create();
        String serviceName = "test-app";
        String accountName = "test-account";
        keyring.setPassword(serviceName, accountName, "test-password");
        String password = keyring.getPassword(serviceName, accountName);
        System.out.println(password);
    }
    

    Gradle
    implementation 'com.github.javakeyring:java-keyring:1.0.1'
    

    马文
    <dependency>
      <groupId>com.github.javakeyring</groupId>
      <artifactId>java-keyring</artifactId>
      <version>1.0.1</version>
    </dependency>
    

    如果您想支持 GNOME 以外的桌面环境,您可能必须提出自己的解决方案或搜索不同的库,但这应该可以帮助您入门。

    关于java - 如何将程序密码存储在 OS keystore 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60985877/

    相关文章:

    java - 将文件读入HashMap

    java - 如何在 Handlebars.java 中指定选项参数?

    java - 使用 openssl 以编程方式读取 java keystore 文件 jceks

    ssl - 将 .crt 和 .pem 文件转换为 keystore

    java - 使用 GSON 序列化 java 对象

    java - Spring Boot 单元测试 - 服务方法未被调用

    Java webservice客户端,动态更改客户端证书

    ssl - Jetty 7.0 SSL 配置的 keystore 密码

    java - 将证书导入 keystore ,证书链为空

    java - 持久化@OneToMany后子表外键为空