В Java 6 е добавен удобен и лесен начин за достъп до сертификатите от Windows Crypto store чрез
1 |
ks = KeyStore.getInstance("Windows-MY", "SunMSCAPI"); |
За съжаление горното работи само, ако JRE е 32 битово. Ако JRE 64 битово, то SunMSCAPI не се поддържа. Което е най-малкото странно. Има няколко thread-a по въпроса в интернет например тук: http://forums.oracle.com/forums/thread.jspa?threadID=1526024
Общо взето това, което предлагат е да се прекомпилира sunmscapi.dll и да се постави в bin директория на JRE
Source-a на OpenJDK6 се сваля лесно и бързо, за съжаление компилацията на цялото JDK е доста времеотнемаща задача, а ако е нужно само да се прекомпилира sunmscapi.dll няма нужда да се прави. Може да се съкрати до следните стъпки:
- Сваля се source-a на OpenJDK 6 от тук
- Изтегля се x64 Windows SDK април 2005 от тук
- Компилация на sunmscapi.dll
- Конфигуриране
1 2 |
pignatov@PIGNATOV /cygdrive/d/INST/Java/OpenJDK6/jdk/src/windows/native/sun/security/mscapi $ cl security.cpp /LD Crypt32.lib Advapi32.lib MSVCRT.LIB bufferoverflowU.lib /I "../../../../../share/javavm/export" /I"../../../../../windows/javavm/export" /Fesunmscapi.dll |
Най-удачно е Crypt32.lib, Advapi32.liv, bufferoverflowU.lib в съответната папка от x64 битовите папки на машината
Горната команда ще генерира 64 битов sunmscapi.dll, като cl.exe e Microsoft-ския компилатор за AMD64. DLL-а се копира в bin директорията на JRE.
В Jre6libsecurityjava.security се добавя следния ред в секцията за security providers:
1 |
security.provider.9=sun.security.mscapi.SunMSCAPI |
В Jre6libext се копира sunmscapi.jar от друга инсталация на JRE6 (32 bit). Може и да се компилира директно от кода, но е доста по-лесно да се копира от друга 32 битова JRE.