java.security.NoSuchProviderException: такого провайдера нет: SunMSCAPI - PullRequest
2 голосов
/ 04 января 2011

У меня есть несколько программ, которые используют SunMSCAPI для чтения веб-страниц, для которых требуется сертификат SSL.Мой код работает под Windows XP (32-разрядная версия), но не работает при новой установке Windows 7 (64-разрядная версия).Вот фрагмент кода:

System.setProperty("javax.net.ssl.keyStoreProvider", "SunMSCAPI");
System.setProperty("javax.net.ssl.keyStoreType", "WINDOWS-MY");
System.setProperty("javax.net.ssl.trustStoreProvider", "SunMSCAPI");
System.setProperty("javax.net.ssl.trustStoreType", "WINDOWS-ROOT"); 
System.setProperty("proxyHost", "proxy");
System.setProperty("proxyPort", "8080");

URL url = new URL(TEST_URL);
try {
    HttpsURLConnection httpsCon = (HttpsURLConnection) url.openConnection();.... 

А вот трассировка стека:

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(Unknown Source)
 at sun.security.jca.GetInstance.getInstance(Unknown Source)
 at sun.security.jca.GetInstance.getInstance(Unknown Source)
 at javax.net.ssl.SSLContext.getInstance(Unknown Source)
 at javax.net.ssl.SSLContext.getDefault(Unknown Source)
 at javax.net.ssl.SSLSocketFactory.getDefault(Unknown Source)
 at javax.net.ssl.HttpsURLConnection.getDefaultSSLSocketFactory(Unknown Source)
 at javax.net.ssl.HttpsURLConnection.<init>(Unknown Source)
 at sun.net.www.protocol.https.HttpsURLConnectionImpl.<init>(Unknown Source)
 at sun.net.www.protocol.https.Handler.openConnection(Unknown Source)
 at sun.net.www.protocol.https.Handler.openConnection(Unknown Source)
 at java.net.URL.openConnection(Unknown Source)
 at GetData2.SetVallues(GetData2.java:56)  *// HttpsURLConnection httpsCon = (HttpsURLConnection) url.openConnection();* 
 ... 2 more
Caused by: java.security.NoSuchProviderException: no such provider: SunMSCAPI
 at sun.security.jca.GetInstance.getService(Unknown Source)
 at sun.security.jca.GetInstance.getInstance(Unknown Source)
 at java.security.Security.getImpl(Unknown Source)
 at java.security.KeyStore.getInstance(Unknown Source)
 at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.getDefaultKeyManager(Unknown Source)
 at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.<init>(Unknown Source)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
 at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
 at java.lang.reflect.Constructor.newInstance(Unknown Source)
 at java.lang.Class.newInstance0(Unknown Source)
 at java.lang.Class.newInstance(Unknown Source)
 ... 15 more

Я пробовал также следующий пример http://muhammadhamed.blogspot.com/2010/04/accessing-ms-certificate-stores-in-java.html, но снова получил это NoSuchProviderException.Я предполагаю, что есть какая-то ошибка конфигурации, но я не уверен, что это такое.

Вот моя информация о JVM:java version "1.6.0_23"Java(TM) SE Runtime Environment (build 1.6.0_23-b05)Java HotSpot(TM) 64-Bit Server VM (build 19.0-b09, mixed mode)

Надеюсь, кто-нибудь сможет мне помочь: -)

С уважением.

1 Ответ

3 голосов
/ 04 января 2011

Страница J2SE Security только говорит о том, что MS CryptoAPI (который использует SunMSCAPI) доступен только под Java 6 на 32-битной Windows.

К счастью, вы все еще можете установить 32-разрядную JVM на Win64.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...