2012-08-03 146 views
0

我試圖在本地計算機上用javamail發送電子郵件, ,當我運行我的課程時,郵件發送完畢。javamail java.io.IOException:密鑰庫格式無效

在生產電腦我得到一個錯誤:

Caused by: javax.mail.MessagingException: Could not convert socket to TLS (java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)) 
     at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:1230) 
     at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:378) 
     at javax.mail.Service.connect(Service.java:271) 
     at javax.mail.Service.connect(Service.java:91) 
     at javax.mail.Service.connect(Service.java:76) 
     at javax.mail.Transport.send(Transport.java:94) 
     ... 8 more 
Caused by: java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl) 
     at javax.net.ssl.DefaultSSLSocketFactory.throwException(SSLSocketFactory.java:179) 
     at javax.net.ssl.DefaultSSLSocketFactory.createSocket(SSLSocketFactory.java:199) 
     at com.sun.mail.util.SocketFetcher.startTLS(SocketFetcher.java:249) 
     at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:1226) 
     ... 13 more 
Caused by: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl) 
     at java.security.Provider$Service.newInstance(Provider.java:1245) 
     at sun.security.jca.GetInstance.getInstance(GetInstance.java:220) 
     at sun.security.jca.GetInstance.getInstance(GetInstance.java:147) 
     at javax.net.ssl.SSLContext.getInstance(SSLContext.java:125) 
     at javax.net.ssl.SSLContext.getDefault(SSLContext.java:68) 
     at javax.net.ssl.SSLSocketFactory.getDefault(SSLSocketFactory.java:102) 
     at com.sun.mail.util.SocketFetcher.startTLS(SocketFetcher.java:247) 
     ... 14 more 
Caused by: java.io.IOException: Invalid keystore format 
     at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:633) 
     at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:38) 
     at java.security.KeyStore.load(KeyStore.java:1185) 
     at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.getDefaultKeyManager(DefaultSSLContextImpl.java:150) 
     at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.<init>(DefaultSSLContextImpl.java:40) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
     at java.lang.Class.newInstance0(Class.java:355) 
     at java.lang.Class.newInstance(Class.java:308) 
     at java.security.Provider$Service.newInstance(Provider.java:1221) 
     ... 20 more 

在安全的路徑有以下文件:

68595 Mar 9 2009 cacerts 
2221 Mar 9 2009 java.policy 
9937 Mar 9 2009 java.security 
    132 Mar 9 2009 javaws.policy 
2940 Mar 9 2009 _local_policy.jar 
2481 Feb 28 12:54 local_policy.jar 
2469 Mar 9 2009 _US_export_policy.jar 
2465 Feb 28 12:54 US_export_policy.jar 

沒有trusted.certs文件。

生產使用jdk 1.6.0_13,有可能是某個文件太舊了? Anoter細節每一件東西在生產中都運行良好,直到上週一(7/30)代碼中沒有任何變化,現在我得到了這個錯誤。

很難弄清楚什麼是錯誤的,因爲我甚至不知道哪個文件有問題。 如果您有任何想法,我接受它!

感謝您的幫助!

回答

0

Finaly的問題是,一個自定義密鑰庫是由管理員定義的:

-Djavax.net.ssl.keyStore = xxxxxxx.p12

而且它缺少這樣的:

-Djavax .net.ssl.keyStoreType = pkcs12

0

嘗試打開密鑰庫文件時似乎失敗。通常,密鑰庫文件在運行應用程序的用戶的主目錄中被命名爲「.keystore」。如果這個文件是在上週一更新的,那麼這將解釋爲什麼你的程序開始失敗。請注意,您可以通過設置javax.net.ssl.keyStore系統屬性來覆蓋密鑰庫文件的默認位置,請檢查該屬性。

問題可能是由您的信任存儲引起的,可由javax.net.ssl.trustStore屬性設置。

更多的信息在JSSE Reference Guide

相關問題