• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

wmixvideo / nfe / #6468

02 Jun 2016 11:49PM UTC coverage: 79.364% (+2.0%) from 77.372%
#6468

push

travis-ci

fincatto
Atualizado xsd de validacao de envio de lote, que valida as notas com assinatura.
Atualizado para versão 2.0.0-SNAPSHOT, pois o codigo quebrou a compatibilidade.

0 of 1 new or added line in 1 file covered. (0.0%)

277 existing lines in 65 files now uncovered.

4742 of 5975 relevant lines covered (79.36%)

50.29 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

94.23
/src/main/java/com/fincatto/nfe310/utils/NFGeraCadeiaCertificados.java
1
package com.fincatto.nfe310.utils;
2

3
import com.fincatto.nfe310.classes.NFAmbiente;
4
import com.fincatto.nfe310.classes.NFAutorizador31;
5
import org.apache.commons.lang3.StringUtils;
6
import org.slf4j.Logger;
7
import org.slf4j.LoggerFactory;
8

9
import javax.net.ssl.SSLContext;
10
import javax.net.ssl.SSLSocket;
11
import javax.net.ssl.TrustManager;
12
import javax.net.ssl.TrustManagerFactory;
13
import javax.net.ssl.X509TrustManager;
14
import java.io.ByteArrayOutputStream;
15
import java.net.URI;
16
import java.security.KeyStore;
17
import java.security.MessageDigest;
18
import java.security.cert.CertificateException;
19
import java.security.cert.X509Certificate;
20

UNCOV
21
public abstract class NFGeraCadeiaCertificados {
×
22

23
    private static final int PORT = 443;
24
    private static final String PROTOCOL = "TLS";
25
    private static final Logger LOGGER = LoggerFactory.getLogger(NFGeraCadeiaCertificados.class);
1✔
26

27
    public static byte[] geraCadeiaCertificados(final NFAmbiente ambiente, final String senha) throws Exception {
28
        final KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
2✔
29
        keyStore.load(null, senha.toCharArray());
2✔
30
        try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
2✔
31
            for (final NFAutorizador31 aut : NFAutorizador31.values()) {
30✔
32
                //Para NFe...
33
                final String urlNF = aut.getNfeStatusServico(ambiente);
28✔
34
                if (StringUtils.isNotBlank(urlNF)) {
28✔
35
                    final String host = new URI(urlNF).getHost();
28✔
36
                    NFGeraCadeiaCertificados.get(keyStore, host, PORT);
28✔
37
                }
38

39
                //Para NFCe...
40
                final String urlNFC = aut.getNfceStatusServico(ambiente);
28✔
41
                if (StringUtils.isNotBlank(urlNFC)) {
28✔
42
                    final String host = new URI(urlNFC).getHost();
16✔
43
                    NFGeraCadeiaCertificados.get(keyStore, host, PORT);
16✔
44
                }
45
            }
46
            keyStore.store(out, senha.toCharArray());
2✔
47
            return out.toByteArray();
2✔
48
        }
2✔
49
    }
50

51
    private static void get(final KeyStore keyStore, final String host, final int port) throws Exception {
52
        final TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
44✔
53
        trustManagerFactory.init(keyStore);
44✔
54

55
        final X509TrustManager defaultTrustManager = (X509TrustManager) trustManagerFactory.getTrustManagers()[0];
44✔
56
        final SavingTrustManager savingTrustManager = new SavingTrustManager(defaultTrustManager);
44✔
57

58
        final SSLContext sslContext = SSLContext.getInstance(PROTOCOL);
44✔
59
        sslContext.init(null, new TrustManager[]{savingTrustManager}, null);
44✔
60

61
        LOGGER.info(String.format("Abrindo conexao para o servidor: %s:%s", host, port));
44✔
62
        try (SSLSocket sslSocket = (SSLSocket) sslContext.getSocketFactory().createSocket(host, port)) {
65✔
63
            sslSocket.setSoTimeout(10000);
39✔
64
            sslSocket.startHandshake();
39✔
65
        } catch (final Exception e) {
65✔
66
            LOGGER.error(String.format("[%s] %s", host, e.toString()));
26✔
67
        }
18✔
68

69
        //se conseguir obter a cadeia de certificados, adiciona no keystore
70
        if (savingTrustManager.chain != null) {
44✔
71
            LOGGER.info(String.format("Certificados enviados pelo servidor: %s", savingTrustManager.chain.length));
37✔
72
            final MessageDigest sha1 = MessageDigest.getInstance("SHA1");
37✔
73
            final MessageDigest md5 = MessageDigest.getInstance("MD5");
37✔
74
            for (int i = 0; i < savingTrustManager.chain.length; i++) {
124✔
75
                final X509Certificate certificate = savingTrustManager.chain[i];
87✔
76
                sha1.update(certificate.getEncoded());
87✔
77
                md5.update(certificate.getEncoded());
87✔
78

79
                final String alias = String.format("%s.%s", host, i + 1);
87✔
80
                keyStore.setCertificateEntry(alias, certificate);
87✔
81
                LOGGER.info(String.format("Adicionado certificado no keystore com o alias: %s", alias));
87✔
82
            }
83
        }
84
    }
44✔
85

86
    private static class SavingTrustManager implements X509TrustManager {
292✔
87
        private final X509TrustManager trustManager;
88
        private X509Certificate[] chain;
89

90
        SavingTrustManager(final X509TrustManager trustManager) {
44✔
91
            this.trustManager = trustManager;
44✔
92
        }
44✔
93

94
        @Override
95
        public X509Certificate[] getAcceptedIssuers() {
96
            return trustManager.getAcceptedIssuers();
28✔
97
        }
98

99
        @Override
100
        public void checkClientTrusted(final X509Certificate[] chain, final String authType) throws CertificateException {
UNCOV
101
            this.trustManager.checkClientTrusted(chain, authType);
×
102
        }
×
103

104
        @Override
105
        public void checkServerTrusted(final X509Certificate[] chain, final String authType) throws CertificateException {
106
            this.chain = chain;
37✔
107
            this.trustManager.checkServerTrusted(chain, authType);
37✔
108
        }
28✔
109
    }
110
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc