апплет с SunMSCapi не работает в Linux

Мы создали новый сайт для нашей сети, где мы позволяем пользователям подписывать PDF-документ с помощью разработанного нами апплета. Проблема в том, что этот апплет работает нормально только в ОС Windows, и мы хотели бы расширить его до ОС Linux.

Когда мы запускаем апплет в Linux, мы получаем это сообщение об ошибке:

[opensc-pkcs11] reader-pcsc.c: 896: pcsc_detect_readers: сбой SCardListReaders: 0x8010002e [opensc-pkcs11] reader-pcsc.c: 1015: pcsc_detect_readers: возвращение с: читатели не найдены [opensc-pkcs11] reader-pcsc.c : 896: pcsc_detect_readers: сбой SCardListReaders: 0x8010002e [opensc-pkcs11] reader-pcsc.c: 1015: pcsc_detect_readers: возвращение с: не найдены читатели java.security.NoSuchProviderException: нет такого поставщика: SunMSCAPI в sun.security.sec. getService (Неизвестный источник) в sun.security.jca.GetInstance.getInstance (Неизвестный источник)

Я думаю, что проблема возникает, когда мы пытаемся прочитать сертифицированные данные, хранящиеся в ОС Windows, с помощью следующего вызова в нашем коде:

 KeyStore keystore = KeyStore.getInstance("Windows-MY", "SunMSCAPI"); 
            keystore.load(null, null); 
            return keystore;

Эту функцию мы используем для получения списка сертификатов.

public KeyStore  obtenerCertificados() throws Exception {

            String osNombre = System.getProperty("os.name");
            String osArquitectura = System.getProperty("os.arch");
            String providerConfig = null;
            String configuracionPKCS11 = null;

            // LINUX
            if(osNombre.contains(new StringBuffer("Linux")))
                providerConfig = "name = OpenSC\nlibrary = /usr/lib/opensc-pkcs11.so\n";
            // WINDOWS
            else if(osNombre.contains(new StringBuffer("Windows")))
                if(!osArquitectura.toLowerCase().contains("x86")){
                    System.out.println("Estamos en toLowerCase().contains x86");
                    providerConfig = "name = NSS"+"\n"+
                    "nssLibraryDirectory = "+"C:/Archivos de programa/Mozilla Firefox"+"\n"+
                    "nssSecmodDirectory = "+"C:/Users/SM/AppData/Local/Mozilla/Firefox/Profiles/plmk3eh9.default"+"\n"+
                    "nssDbMode = readOnly" + "\n" +
                    "nssModule = keystore" + "\n" + 
                    "\r";

                }
                else{
                    System.out.println("Estamos en NO toLowerCase().contains x86");
                    providerConfig = "name = NSS"+"\n"+
                    "nssLibraryDirectory = "+"C:/Program Files (x86)/Mozilla Firefox"+"\n"+
                    "nssLibrary = "+"C:/Program Files (x86)/Mozilla Firefox/softokn3.dll"+"\n"+
                    "nssSecmodDirectory = "+"C:/Users/SM/AppData/Roaming/Mozilla/Firefox/Profiles/plmk3eh9.default"+"\n"+
                    "nssDbMode = readOnly" + "\n" +
                    "nssModule = keystore" + "\n" + 
                    "\r";

                }
            // MAC OS
            else {providerConfig = "name = OpenSC\nlibrary = /Library/OpenSC/lib/opensc-pkcs11.so\n";}

            ByteArrayInputStream localByteArrayInputStream = new ByteArrayInputStream(providerConfig.getBytes());
            SunPKCS11 _pk11provider = null;
            try {
            _pk11provider = new SunPKCS11(localByteArrayInputStream);
            Security.addProvider(_pk11provider); 
//          _pk11provider.login(new Subject(), new DialogCallbackHandler());
            }catch(Throwable e){
            System.out.println(e.getMessage());
            }
            KeyStore keystore = KeyStore.getInstance("Windows-MY", "SunMSCAPI"); 
            keystore.load(null, null); 
            return keystore;


            }

Любые идеи о том, как расширить это использование для Linux и MAC ???

Большое спасибо за вашу помощь!!

Ответы на вопрос(1)

Ваш ответ на вопрос