Я хотел бы получить доступ к хранилищу хранилищ Identity (JKS), настроенным в пользовательской конфигурации хранилища веб-журнала в моем веб-приложении. Как я могу получить weblogic, чтобы разоблачить это, не полагаясь на следующие свойства среды: -Djavax.net.ssl.Keystore, -Djavax.net.ssl.KeystorePassword.Как мое приложение может получить доступ к хранилищу ключей, настроенному в консоли администратора Weblogic?
3
A
ответ
2
В качестве отправной точки можно использовать следующий код.
Несколько примечаний:
- Пользователь выполняет код должен принадлежать к группе под названием
OracleSystemGroup
- Keystore загружается из файловой системы, который не рекомендуется по спецификации EJB. Но я думаю, что чтение файлов можно безопасно сделать.
- Ключевая фраза для ключей хранится в
java.lang.String
, что не рекомендуется.
Из-за этих недостатков я исследую лучший подход. Я пытаюсь найти службу WebLogic, которая будет предоставлять услуги для доступа к сертификатам и ключам в хранилище удостоверений. Кажется, что there is not one.
InitialContext ic = new InitialContext();
MBeanServer server = (MBeanServer) ic.lookup("java:comp/env/jmx/runtime");
// Get access to server configuration
ObjectName runtime = new ObjectName("com.bea:Name=RuntimeService,Type=weblogic.management.mbeanservers.runtime.RuntimeServiceMBean");
ObjectName serverConfig = (ObjectName) server.getAttribute(runtime, "ServerConfiguration");
/* Load identity store location and passphrase.
* If e.g. Demo identity has been configured (in WL console) instead of
* custom identity then the following does not work.
*/
// Passphrase as clear text
Object keyStorePassPhrase = server.getAttribute(serverConfig, "CustomIdentityKeyStorePassPhrase");
Object keyStoreFileName = server.getAttribute(serverConfig, "CustomIdentityKeyStoreFileName");
// Load keystore
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(new FileInputStream(keyStoreFileName.toString()),
keyStorePassPhrase.toCharArray());