Andei pesquisando sobre o erro acima e me parece que no momento do service.create é feita uma requisicao com o wsdl e em webservices que exigem autenticacao é necessário que seja informado o keystore.
Bem assim é a programação, resolvendo um problema e aparecendo outro, a saga da NF parece n ter fim.
Amigos, o erro agora é : java.io.IOException: Keystore was tampered with, or password was incorrect
ele ocorre nessa parte do codigo:
SSLSocketFactoryGenerator sslFactory = new SSLSocketFactoryGenerator(alias.toString(), fileKeyStore.toString(), filepfx.toString(), passKeyStore.toString(), passpfx.toString());
javax.net.ssl.SSLSocketFactory socketFactory = null;
try{
socketFactory = sslFactory.getSSLSocketFactory();
}catch (Exception e){
return new Variant(e.toString());
}
O código do SSLSocketFactoryGenerator me foi cedido pelo nosso amigo Alexandre(que tem me ajudado ate aqui).
segue código:
[code]
package raneves.generator;
import incode.tifs.AliasSelectorKeyManager;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.Socket;
import java.security.GeneralSecurityException;
import java.security.KeyStore;
import java.security.Principal;
import java.security.PrivateKey;
import java.security.cert.X509Certificate;
import java.util.logging.Logger;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.KeyManager;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509KeyManager;
public class SSLSocketFactoryGenerator {
private String alias = null;
private String keyStore = null;
private String trustStore = null;
public SSLSocketFactoryGenerator (String alias, String keyStore, String trustStore, String keyStorePass, String trustStorePass) {
if (alias == null)
throw new IllegalArgumentException("The alias may not be null");
this.alias = alias;
this.keyStore = keyStore;
this.trustStore = trustStore;
}
public SSLSocketFactory getSSLSocketFactory() throws IOException, GeneralSecurityException {
KeyManager[] keyManagers = getKeyManagers();
TrustManager[] trustManagers =getTrustManagers();
//For each key manager, check if it is a X509KeyManager (because we will override its //functionality
for (int i=0; i<keyManagers.length; i++) {
if (keyManagers[i] instanceof X509KeyManager) {
keyManagers[i]=new AliasSelectorKeyManager((X509KeyManager)keyManagers[i], alias);
}
}
SSLContext context=SSLContext.getInstance("SSL");
context.init(keyManagers, trustManagers, null);
SSLSocketFactory ssf=context.getSocketFactory();
return ssf;
}
public String getKeyStorePassword() {
return "keyStorePassword";
}
public String getTrustStorePassword() {
return "trustStorePassword";
}
public String getKeyStore() {
return keyStore;
}
public String getTrustStore() {
return trustStore;
}
private KeyManager[] getKeyManagers()
throws IOException, GeneralSecurityException
{
//Init a key store with the given file.
String alg=KeyManagerFactory.getDefaultAlgorithm();
KeyManagerFactory kmFact=KeyManagerFactory.getInstance(alg);
FileInputStream fis=new FileInputStream(getKeyStore());
KeyStore ks=KeyStore.getInstance("jks");
ks.load(fis, getKeyStorePassword().toCharArray());
fis.close();
//Init the key manager factory with the loaded key store
kmFact.init(ks, getKeyStorePassword().toCharArray());
KeyManager[] kms=kmFact.getKeyManagers();
return kms;
}
protected TrustManager[] getTrustManagers() throws IOException, GeneralSecurityException
{
String alg=TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory tmFact=TrustManagerFactory.getInstance(alg);
FileInputStream fis=new FileInputStream(getTrustStore());
KeyStore ks=KeyStore.getInstance("jks");
ks.load(fis, getTrustStorePassword().toCharArray());
fis.close();
tmFact.init(ks);
TrustManager[] tms=tmFact.getTrustManagers();
return tms;
}
}[/code]
olhando o código uma coisa que n entendi foi porque vc(alexandre) pega a senha como parametro mas n seta ela na construtora.