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);
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