2012-05-01 3 views
3

Я хотел бы получить доступ к хранилищу хранилищ Identity (JKS), настроенным в пользовательской конфигурации хранилища веб-журнала в моем веб-приложении. Как я могу получить weblogic, чтобы разоблачить это, не полагаясь на следующие свойства среды: -Djavax.net.ssl.Keystore, -Djavax.net.ssl.KeystorePassword.Как мое приложение может получить доступ к хранилищу ключей, настроенному в консоли администратора Weblogic?

ответ

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());