使用java读取wildfly中凭证存储中存储的密码?

l3zydbqr  于 2021-07-12  发布在  Java
关注(0)|答案(2)|浏览(402)

我在wildfly 17.x凭证存储中存储了几个应用程序密码。如何以编程方式从凭证存储访问存储的密码?
这就是如何创建凭证存储并在其中存储密码。

/subsystem=elytron/credential-store=test:add(relative-to=jboss.server.data.dir, location=test.jceks, create=true,credential-reference={clear-text=storepass})

/subsystem=elytron/credential-store=test:add-alias(alias=keystorepw,secret-value=secret)
x8diyxa7

x8diyxa71#

我在另一个扩展中而不是在jceks中创建了商店。一旦这是固定的,我可以从商店读取密码。花了一段时间才弄明白这一点,因为wildfly在创建商店时没有抱怨,除了按程序阅读外,其他工作都很好。

kyxcudwk

kyxcudwk2#

首先请原谅我用英语写作。我现在看到的最好的方法是使用这段代码,使用库maven版本1.12.1.final。其他库(如最近的alpha)对此代码有错误。

<dependency>
        <groupId>org.wildfly.security</groupId>
        <artifactId>wildfly-elytron</artifactId>
        <version>1.12.1.Final</version>
</dependency>

方法

public Password giveMeAPass(String alias) throws NoSuchAlgorithmException, CredentialStoreException, InvalidKeySpecException {
    /*
     * Create a ProtectionParameter for access to the store.
     */
    Password storePassword = ClearPassword.createRaw(
            ClearPassword.ALGORITHM_CLEAR,
            "storepass".toCharArray());

    ProtectionParameter protectionParameter = new CredentialSourceProtectionParameter(
            IdentityCredentials.NONE.withCredential(
                    new PasswordCredential(storePassword)));

    Security.addProvider(elytronProvider);

    CredentialStore credentialStore = CredentialStore.getInstance(
            "KeyStoreCredentialStore", csProvider);
    // Configure and Initialise the CredentialStore
    String configPath = System.getProperty("jboss.server.data.dir");
    Map<String, String> configuration = new HashMap<>();

    String path = configPath + File.separator + "test.jceks";
    configuration.put("keyStoreType", "JCEKS");
    configuration.put("location", path);
    configuration.put("modifiable", "false");

    //Inicialize credentialStore
    credentialStore.initialize(configuration, protectionParameter);

    return credentialStore.retrieve(alias, PasswordCredential.class).getPassword();
}

此方法基于您的凭据存储。

相关问题