1

我目前使用以下代码从 WebSphere Application Server Full Profile中的密钥库的证书中获取公钥:

        KeySetManager keySetMgr = KeySetManager.getInstance();
        WSKeySet keySet = keySetMgr.getKeySet(KEY_SET_NAME);
        KeyReference[] allKeyReferences = keySet.getAllKeyReferences();
        for (int i = 0; i < allKeyReferences.length; ++i) {
            try {
                KeyReference kref = allKeyReferences[i];
                String keyAlias = kref.getKeyAlias();               
                if (!SIGNER_CERT_ALIAS.equals(keyAlias)) { continue; }
                WSKeyStore wsKeyStore = kref.getWSKeyStore();
                
                String location = wsKeyStore.getLocation();
                
                String type = wsKeyStore.getProperty("com.ibm.ssl.keyStoreType");
            
                String name = wsKeyStore.getProperty("com.ibm.ssl.keyStoreName");
                
                String provider = wsKeyStore.getProperty("com.ibm.ssl.keyStoreProvider");
            
                String password = wsKeyStore.getProperty("com.ibm.ssl.keyStorePassword");
                
                String scope = wsKeyStore.getProperty("com.ibm.ssl.keyStoreScope");
                
                KeyStore keyStore = KeyStoreManager.getInstance().getKeyStore(name, type, provider, location, password, scope, true, null);
                
                Certificate certificate = keyStore.getCertificate(keyAlias);
                
                PublicKey publicKey = certificate.getPublicKey();               

                return publicKey;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return null;

上面的代码使用专有的 IBM WAS ND 类:

import com.ibm.ws.crypto.config.KeyReference;
import com.ibm.ws.crypto.config.KeySetManager;
import com.ibm.ws.crypto.config.WSKeySet;
import com.ibm.ws.ssl.config.KeyStoreManager;
import com.ibm.ws.ssl.config.WSKeyStore;

现在我需要将应用程序迁移到 WebSphere Liberty Profile (WLP),而这些类com.ibm.ws.crypto.config.*在 WLP 中不存在,并且代码不可移植,很遗憾。

根据我了解到的情况,我无法以编程方式访问 WLP 上的密钥库,这种说法是否准确?

我没有找到任何如何在 WLP 中实现类似方法的示例。

我目前的理解是我必须简单地使用KeyStore.load(inputStream, password)和存储某处(或硬代码)密钥存储文件名和密码。这是WLP常用的方法吗?

迁移的最终目标是将应用程序 Docker 化并迁移到云(OpenShift),所以问题是:在哪里存储密钥库?内部应用程序,还是内部 WLP 安装?我想差别不大,因为如果证书过期,我需要重建整个 Docker 映像,其中包括 WLP 和应用程序。

或者也许可以存储在云中并以某种方式从 Docker 容器内部访问。这可能是最好的方法,因为证书到期不需要重建映像,只需更新云环境。

任何建议或经验或提示都将受到高度赞赏。

4

1 回答 1

0

您可能想查看以下内容:https ://www.ibm.com/support/knowledgecenter/en/SSCSJL_4.3.x/sec-tls4apps.html 。虽然该文档是针对云包的,但它可以在其他容器环境中使用。

于 2021-02-16T22:08:00.990 回答