使用Java 7启动JNLP时的NoSuchAlgorithmException

时间:2013-05-13 13:33:32

标签: java runtime-error java-7 jnlp java-web-start

升级到Java 7后,启动远程jnlp时,我在Java控制台中看到以下异常:

java.security.KeyStoreException: WIExplorerMy not found
    at java.security.KeyStore.getInstance(Unknown Source)
    at com.sun.deploy.services.WPlatformService$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.deploy.services.WPlatformService.getBrowserClientAuthKeyStore(Unknown Source)
    at sun.plugin2.applet.context.InitialJNLPExecutionContext.getBrowserClientAuthKeyStore(Unknown Source)
    at sun.plugin2.main.client.DisconnectedExecutionContext.getBrowserClientAuthKeyStore(Unknown Source)
    at sun.plugin2.applet.Applet2BrowserService.getBrowserClientAuthKeyStore(Unknown Source)
    at com.sun.deploy.security.X509DeployKeyManager.<init>(Unknown Source)
    at com.sun.deploy.net.protocol.https.Handler$Initializer$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.deploy.net.protocol.https.Handler$Initializer.<clinit>(Unknown Source)
    at com.sun.deploy.net.protocol.https.Handler.openConnection(Unknown Source)
    at java.net.URL.openConnection(Unknown Source)
    at com.sun.deploy.net.BasicHttpRequest.createUrlConnection(Unknown Source)
    at com.sun.deploy.net.BasicHttpRequest.doRequest(Unknown Source)
    at com.sun.deploy.net.BasicHttpRequest.doGetRequestEX(Unknown Source)
    at com.sun.deploy.net.DownloadEngine.actionDownload(Unknown Source)
    at com.sun.deploy.net.DownloadEngine.downloadResource(Unknown Source)
    at com.sun.deploy.cache.ResourceProviderImpl.getResource(Unknown Source)
    at com.sun.deploy.cache.ResourceProviderImpl.getResource(Unknown Source)
    at com.sun.javaws.LaunchDownload$DownloadTask.call(Unknown Source)
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.security.NoSuchAlgorithmException: WIExplorerMy KeyStore not available
    at sun.security.jca.GetInstance.getInstance(Unknown Source)
    at java.security.Security.getImpl(Unknown Source)
    ... 26 more

此外,错误屏幕显示“错误。点击查看详细信息”约2秒钟后会消失。

除此之外,一切似乎都正常运作。

使用Java 6,一切都按预期工作。

想法如何解决?

4 个答案:

答案 0 :(得分:1)

我认为一些最新的Java 7更新已经淘汰了一些加密方案,因此如果您在使用Java 6时使用其中一个,那么获取将是一个完全正常的例外。

请参阅此list of enhancements and changes for Java 7

  

不推荐使用弱密码套件

     

根据RFC 4346,RFC 5246和RFC 5469,一些密码套件已经过时,不应使用。 SunJSSE中默认禁用这些过时的套件。有关详细信息,请参阅有关SunJSSE提供程序的文档中的密码套件列表。

话虽这么说,这可以解释NoSuchAlgorithmException,但错误消息似乎提到了一个关于缺少密钥库的事情,所以这可能是无关的,我们需要你提供SSCCE或任何足够接近一个的密码库

答案 1 :(得分:1)

我通过添加

解决了这个问题
security.provider.11=com.sun.deploy.security.MSCryptoProvider

C:\Program Files\Java\jre1.8.0_31\lib\security\java.security

虽然这个错误对我来说并不致命,但只是javaws试图在回到由控制面板管理的java密钥库之前读取本地浏览器密钥库。这些文件位于C:\Users\USERID\AppData\LocalLow\Sun\Java\Deployment\security

有趣的是,有一个安全提供程序预先连接到java.security文件中,它是

security.provider.10=sun.security.mscapi.SunMSCAPI

此提供程序还可以读取浏览器密钥库,但是商店类型是windows-my,而不是WIExplorerMy

答案 2 :(得分:0)

Tarlog,您有任何解决方案吗?我有同样的问题,我怀疑只有在尝试安全连接时才会发生KeyStoreException异常的第一个问题。而那个险恶的“错误。点击查看详细信息”问题发生在通过jnlp加载的任何Applet上。

我还没有找到任何解决方案。

编辑:对于KeyStoreException我已经意识到由于apache证书文件以某种方式出现问题。我已经生成了ceritificate文件并重新启动了apache。例外情况不再发生。

错误窗口的另一个问题仍然存在。

答案 3 :(得分:0)

关于Error Click for details issue - 我通过向实现javax.jnlp.DownloadServiceListener的源(可能只是一个虚拟类)添加一个类来解决这个问题,然后在jnlp文件中指定该类{{1 }}