Ola,
Tenho uma aplicacao que faz autorizacao de NFEs para varios clientes.
Atualmente, uso o certificado PFX da minha empresa para comunicacao com cada SEFAZ dos estados,
usando o certificado PFX do cliente apenas para assinar o XML.
Sendo assim, faco o codigo abaixo que seta a KeyStore global do Java para meu PFX e as chaves publicas das SEFAZ dentro de um unico JKS.
System.setProperty("sun.security.ssl.allowUnsafeRenegotiation", "true");
System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
// Keystore com o certificado PFX
System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
System.setProperty("javax.net.ssl.keyStore", nomeArqCertifCliente);
System.setProperty("javax.net.ssl.keyStorePassword", senhaCertifCliente);
// KeyStore com as chaves publicas de todas as SEFAZ em um JKS
System.setProperty("javax.net.ssl.trustStoreType", "JKS");
System.setProperty("javax.net.ssl.trustStore", nomeArqCertifServidor);
System.setProperty("javax.net.ssl.trustStorePassword", senhaCertifServidor);
Contudo, agora preciso implementar o cliente do webservice ConsultaCadastro.
O problema deste webservice é que ele checa se o certificado é de uma empresa
que esta cadastrado na SEFAZ. Como minha empresa nao esta, nao consigo usar
meu PFX, tenho que usar o do cliente. Mas ao setar a KeyStore global com o PFX
do cliente, outros clientes nao conseguem ao mesmo tempo fazer a mesma consulta,
ou seja, somente um de cada vez funciona.
Existe alguma forma de indicar para o Java que uma determinada thread vai usar
uma KeyStore separada? Se sim, eu poderia gerar uma thread e setar a KeyStore
com o PFX especifico do cliente que nao afetaria outras threads.