PKCS11 com OpenSC + Cartão e-Cpf

0 respostas
I

Opa,

Alguem está usando ativamente o projeto OpenSC?

Meu problema é o seguinte, eu consigo com um cartão da OAB, mas com um e-Cpf não vai e os dois são da CertiSign.

Eu uso o código abaixo:
String aPKCS11LibraryFileName = 
			"C:\\Program Files\\Smart card bundle\\opensc-pkcs11.dll";
		String pkcs11ConfigSettings =
            "name = SmartCard\n" + "library = " + aPKCS11LibraryFileName ;
        byte[] pkcs11ConfigBytes = pkcs11ConfigSettings.getBytes();
        ByteArrayInputStream confStream = new ByteArrayInputStream(pkcs11ConfigBytes);
        Provider pkcs11Provider = null;

        // Instantiate the provider dynamically with Java reflection
        try {
            pkcs11Provider = new SunPKCS11(confStream);
            Security.addProvider(pkcs11Provider);
        } catch (Exception e) {
        	System.out.println(e.getMessage());
        	System.out.println("teste");
            e.printStackTrace();
            throw new KeyStoreException("Não foi possivel inicializar a API Sun PKCS#11 security " +
                ". Motivo: " + e.getCause().getMessage());
        }

        // Read the keystore form the smart card
        char[] pin = "1234".toCharArray();
        Security.getProviders();
        KeyStore keyStore = KeyStore.getInstance("PKCS11", pkcs11Provider);
        keyStore.load(null, pin);
        System.out.println(keyStore);
Para poder funcionar eu baixei o "Windows Installer SCB" que está descrito como "Unmaintained" e pela data da compilação da URL está bem desatualizada. Com esta dll ele funciona com o cartão da OAB e com o do e-Cpf dá este erro:
unable to enumerate apps: Incorrect parameters in APDU
[opensc-pkcs11] pkcs15.c:761:sc_pkcs15_bind: returning with: Unsupported card
[opensc-pkcs11] pkcs15.c:761:sc_pkcs15_bind: returning with: Unsupported card
[opensc-pkcs11] pkcs15.c:761:sc_pkcs15_bind: returning with: Unsupported card
[opensc-pkcs11] pkcs15.c:761:sc_pkcs15_bind: returning with: Unsupported card
Exception in thread "main" java.security.KeyStoreException: PKCS11 not found
	at java.security.KeyStore.getInstance(KeyStore.java:676)
	at ClasseTeste.main(ClasseTeste.java:48)
Caused by: java.security.NoSuchAlgorithmException: no such algorithm: PKCS11 for provider SunPKCS11-SmartCard
	at sun.security.jca.GetInstance.getService(GetInstance.java:83)
	at sun.security.jca.GetInstance.getInstance(GetInstance.java:202)
	at java.security.Security.getImpl(Security.java:688)
	at java.security.KeyStore.getInstance(KeyStore.java:673)
	... 1 more

Ele consegue registrar o Provider, mas quando tenta obter o keystore pro PKCS11 dá este erro acima. e antes do erro em si podemos ver o debug da API da dll: [opensc-pkcs11] pkcs15.c:761:sc_pkcs15_bind: returning with: Unsupported card

Isto dá entender que a DLL do openSC não está reconhecendo este cartão (provavelmente pelo hardware do cartão).

Baixando do build (o que eles recomendam) da outro problema mais grave:
java.security.ProviderException: Initialization failed
	at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:340)
	at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:90)
	at ClasseTeste.main(ClasseTeste.java:35)
Caused by: java.io.IOException: Não foi possível encontrar o procedimento especificado.
C:\OpenSC\bin\opensc-pkcs11.dll
	at sun.security.pkcs11.wrapper.PKCS11.connect(Native Method)
	at sun.security.pkcs11.wrapper.PKCS11.<init>(PKCS11.java:141)
	at sun.security.pkcs11.wrapper.PKCS11.getInstance(PKCS11.java:154)
	at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:281)
	... 2 more
Exception in thread "main" java.security.KeyStoreException: Não foi possivel inicializar a API Sun PKCS#11 security . Motivo: Não foi possível encontrar o procedimento especificado.
C:\OpenSC\bin\opensc-pkcs11.dll
	at ClasseTeste.main(ClasseTeste.java:39)

Alguem já trabalhou ou trabalha com o OpenSC?

[]'s

Criado 20 de novembro de 2009
Respostas 0
Participantes 1