Applet mit SunMSCapi funktioniert nicht unter Linux

Wir haben eine neue Website für unser Web erstellt, auf der die Benutzer mit einem von uns entworfenen Applet ein PDF-Dokument signieren können. Das Problem ist, dass dieses Applet nur unter Windows funktioniert und wir es gerne auf Linux OS erweitern möchten.

Wenn wir das Applet unter Linux ausführen, erhalten wir folgende Fehlermeldung:

[opensc-pkcs11] reader-pcsc.c: 896: pcsc_detect_readers: SCardListReaders failed: 0x8010002e [opensc-pkcs11] reader-pcsc.c: 1015: pcsc_detect_readers: returning with: Keine reader gefunden [opensc-pkcs11] reader-pcsc.c : 896: pcsc_detect_readers: SCardListReaders fehlgeschlagen: 0x8010002e [opensc-pkcs11] reader-pcsc.c: 1015: pcsc_detect_readers: Rückkehr mit: Keine Leser gefunden java.security.NoSuchProviderException: Kein solcher Anbieter: SunMSCAPI bei sun.security.stance getService (unbekannte Quelle) bei sun.security.jca.GetInstance.getInstance (unbekannte Quelle)

Ich denke, das Problem kommt, wenn wir versuchen, das zertifizierte in dem Windows-Betriebssystem mit diesem Aufruf in unserem Code zu lesen:

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

Diese Funktion verwenden wir, um die Liste der Zertifikate zu erhalten.

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;


            }

Irgendwelche Ideen, wie man diese Verwendung auf Linux und MAC ausdehnt ???

Vielen dank für Deine Hilfe!!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage