2015-10-02 4 views
2

До сих пор я работал с сертификатом, который был добавлен в проект SoapUI 5.2, и дал мне доступ к предварительно подготовленному серверу. Однако теперь, когда я готов перейти к производственной среде, я пытаюсь проверить новый сертификат производства с SoapUI, но я получаю следующую ошибку:Undefined CommonName в сертификате

WARN:Using fallback method to load keystore/truststore due to: Invalid keystore format 
ERROR:An error occurred [java.lang.NullPointerException], see error log for details 

И журнал ошибок говорит:

ERROR:Could not load keystore/truststore 
ERROR:java.lang.NullPointerException 
    java.lang.NullPointerException 
    at org.apache.commons.ssl.KeyStoreBuilder.build(KeyStoreBuilder.java:176) 
    at org.apache.commons.ssl.KeyStoreBuilder.build(KeyStoreBuilder.java:97) 
    at org.apache.commons.ssl.KeyStoreBuilder.build(KeyStoreBuilder.java:88) 
    at com.eviware.soapui.impl.wsdl.support.wss.crypto.KeyMaterialWssCrypto.fallbackLoad(KeyMaterialWssCrypto.java:206) 
    at com.eviware.soapui.impl.wsdl.support.wss.crypto.KeyMaterialWssCrypto.load(KeyMaterialWssCrypto.java:168) 
    at com.eviware.soapui.impl.wsdl.support.wss.crypto.KeyMaterialWssCrypto.getStatus(KeyMaterialWssCrypto.java:216) 
    at com.eviware.soapui.impl.wsdl.panels.project.WSSTabPanel$CryptoTableModel.getValueAt(WSSTabPanel.java:643) 
    at javax.swing.JTable.getValueAt(Unknown Source) 
    at javax.swing.JTable.prepareRenderer(Unknown Source) 
... 

Единственное различие, которое я нашел между предварительно производства и производственных сертификатов в том, что последний не имел поле CommonName определено.

Я знаю, что это поле не обязательно, так как это возможно? Как я могу решить эту проблему без запроса нового сертификата? Это не вариант.

Любое предложение будет оценено.

ответ

2

Я проверить pom.xml проекта SoapUI для 5.2 versión, и его использование не-но-Обще-SSL версии 0.3.11:

<dependency> 
     <groupId>commons-ssl</groupId> 
     <artifactId>not-yet-commons-ssl</artifactId> 
     <version>0.3.11</version> 
    </dependency> 

И если вы проверить метод build для org.apache.commons.ssl.KeyStoreBuilder класса, за исключением выброшен в вашей ошибки журнала вы увидите:

public static KeyStore build(byte[] jksOrCerts, byte[] privateKey, 
          char[] jksPassword, char[] keyPassword) 
    throws IOException, CertificateException, KeyStoreException, 
    NoSuchAlgorithmException, InvalidKeyException, 
    NoSuchProviderException, ProbablyBadPasswordException, 
    UnrecoverableKeyException { 

    ... 
     KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); 
     ks.load(null, jksPassword); 
     Iterator keysIt = keys.iterator(); 
     Iterator chainsIt = chains.iterator(); 
     int i = 1; 
     while (keysIt.hasNext() && chainsIt.hasNext()) { 
      Key key = (Key) keysIt.next(); 
      Certificate[] c = (Certificate[]) chainsIt.next(); 
      X509Certificate theOne = buildChain(key, c); 
      String alias = "alias_" + i++; 
      // The theOne is not null, then our chain was probably altered. 
      // Need to trim out the newly introduced null entries at the end of 
      // our chain. 
      if (theOne != null) { 
       c = Certificates.trimChain(c); 
       alias = Certificates.getCN(theOne); 
/* line 176 */ alias = alias.replace(' ', '_'); 
      } 
      ks.setKeyEntry(alias, key, keyPassword, c); 
     } 
     return ks; 
    } 
} 

Так, кажется, что вы правы, и проблема в том, что сертификат не имеет общего названия, так org.apache.commons.ssl.Certificates.getCN(X509Certificate) возвращает null в качестве псевдонима, а затем alias.replace выбрасывает NPE.

   alias = Certificates.getCN(theOne); 
/* line 176 */ alias = alias.replace(' ', '_'); 

Я не вижу ничего, что говорит, что Common Name является обязательным в RFC5280, однако различный код/​​программное обеспечение, использовать его для различных целей, пока еще не Обще-SSL делает.

Ваш сертификат, вероятно, прав, но вы не можете использовать его с версией SOAPUI 5.2, чтобы проверить свою среду, если у нее нет CN, поэтому, если вы хотите использовать SOAPUI для проверки своей среды, я думаю, что вы должны переиздавать сертификат, создающий CSR с CN. Или вы можете сообщить о проблеме http://juliusdavies.ca/commons-ssl/, а затем попросить SoapUI включить последнюю версию ...

Надеются, что это помогает,

+0

Вашего ответа очень полезно. Я уже подозревал, что проблема в коде библиотеки еще не была - commons-ssl, но я надеялся, что будет какое-то решение, которое я смог сделать для себя. Вы сделали отличную работу по анализу. Спасибо. – Julio

+0

@Julio приятно помочь вам. Однако я только делаю анализ по причине ошибки, но я не совсем уверен, есть ли возможное обходное решение, удача в поиске доступного решения ':)' – albciff

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