2017-02-16 6 views
1

Я интегрирую cxf webservices, без пружин, подписываются сообщения. В качестве руководства я использовал этот учебник CXF Security. Я хочу хранить сертификаты x509 или хранилище ключей в db.
Я переопределил метод WSS4JOutInterceptor.loadCryptoFromPropertiesFile.Как читать хранилище ключей от db

@Override 
    protected Crypto loadCryptoFromPropertiesFile(String propFilename, RequestData reqData) throws WSSecurityException { 
     KeyStore ks = KeyStore.getInstance("JKS"); 
     ks.load(...); 
     X509Certificate certificate = (X509Certificate) ks.getCertificate("client"); 

     X509Certificate[] certificates = { certificate}; 

     CertificateStore cs = new CertificateStore(certificates); 
     return cs; 
    } 

Но несколько вопросов здесь:
1. Там же ошибка, как

Вызванная: java.lang.NullPointerException: при условии нулевого имени в javax.security.auth.x500.X500Principal . (X500Principal.java:172)

Я проверил и subjectDN не является нулевым
2. Я не уверен, если это путь, и я должен в тахометр как-то закрытый ключ подписать сообщение

+0

Это может быть дубликатом, как http://stackoverflow.com/questions/3184502/storing-public-and-private-keys-in-a-database-or-keystore – fabfas

+0

Я думаю, что мне не нужно читать хранилище ключей из db. Проблема заключается в WSS4JOutInterceptor, поскольку он читает свойства только в том случае, если я не ошибаюсь – ra74

+0

Предполагая, что WSS4JOutInrerceptor читает или принимает только тип свойств, вы можете адаптировать свой код для свойств с помощью шаблона адаптера. Надеюсь, это поможет! – fabfas

ответ

0
  1. Ошибка происходит потому, CertificationStore не поддерживает псевдонимы
  2. Лучше всего было бы реализовать собственный поставщик путем расширения CryptoBase
+0

Не очень полезный ответ. 1. Почему отсутствие поддержки псевдонимов приводит к этой ошибке? 2. Объясните подробнее о расширении CryptoBase. – Cheeso

Смежные вопросы