Alias Certificado Digital Duplicado

3 respostas
S
Bom TArde, Tenho um Programa de NFE Rodando, que pega os Certificados digitais atravez do Repositorio do Windows. Atravez do cod. abaixo:
//Procedimento de listagem dos certificados digitais  
	    public String[] funcListaCertificados(boolean booCertValido) throws NoSuchProviderException, IOException, NoSuchAlgorithmException, CertificateException {  
	  
	        //Estou setando a variavel para 20 dispositivos no maximo  
	        String strResult[] = new String[20];  
	        Integer intCnt = 0;  
	  
	        try {  
	            KeyStore ks = KeyStore.getInstance("Windows-MY", "SunMSCAPI");  
	            ks.load(null, null);  
	  
	            Enumeration<String> aliasEnum = ks.aliases();  
	  
	            while (aliasEnum.hasMoreElements()) {  
	                String aliasKey = (String) aliasEnum.nextElement();  
	  
	                if (booCertValido == false) {  
	                    strResult[intCnt] = aliasKey;  
	                } else if (ks.isKeyEntry(aliasKey)) {  
	                    strResult[intCnt] = aliasKey;  
	                }  
	  
	                if (strResult[intCnt] != null) {  
	                    intCnt = intCnt + 1;  
	  
	                }  
	  
	            }  
	  
	        } catch (KeyStoreException ex) {  
	            Nfe nfe = new Nfe();
	            nfe.setErro(ex.getMessage());
	            Log.logs(nfe, "Carregar Certificados");
	        }  
	  
	        return strResult;  
	  
	    }
Essa Função Retorna uma Lista com os Alias dos Certificados. Mas peguei varios casos que o cliente tem mais de um certificado com o mesmo Nome, gerando assim a mesma Alias. Na grande maioria das vezes o primeiro certificado está vencido! Dai quando eu pego o certificado de tal alias, ele retorna o primeiro certificado, No caso o certificado errado. Exemplo:
System.setProperty("javax.net.ssl.keyStoreProvider", "SunMSCAPI");
			System.setProperty("javax.net.ssl.keyStoreType", "Windows-MY");

			System.setProperty("javax.net.ssl.keyStoreAlias", alias);
			System.setProperty("javax.net.ssl.keyStorePassword", senha);

Algué já passou por isso, ou poderia me ajudar com a pensar em uma solução? :?:

3 Respostas

E

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6483657 indica que isso é um bug que somente será resolvido no Java 8 (argh).
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6672015 reclama do mesmo erro, mas tem um trecho de código que é um quebra-galho para o problema (infelizmente acho que, no seu caso, não vai funcionar, porque modifica os “aliases” dos certificados e não sei se o seu hardware permite que os aliases sejam modificados :frowning: :frowning: :frowning: )

S

Credo… Um Bug!
Fazer o que né, só resta esperar. A gambiarra citada não funcionou! Não se pode alterar Alias.

Mas Valeu!

E

A propósito, não sei se outro provider (que não o SunMSCAPI) consegue lidar com esse problema. Ele usa o “Friendly Name” para gerar os aliases? É que nunca mexi com esse provider (porque no meu tempo isso não existia e tive de fazer as coisas de outro jeito). Você pode ter N certificados com o mesmo “Friendly Name”, e é isso que não é muito amigável :frowning:

Criado 24 de outubro de 2012
Ultima resposta 24 de out. de 2012
Respostas 3
Participantes 2