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

wmixvideo / nfe / #7325

18 Nov 2025 12:44PM UTC coverage: 52.617% (+0.1%) from 52.488%
#7325

push

web-flow
Bump org.apache.commons:commons-lang3 from 3.19.0 to 3.20.0 (#1114)

Bumps org.apache.commons:commons-lang3 from 3.19.0 to 3.20.0.

---
updated-dependencies:
- dependency-name: org.apache.commons:commons-lang3
  dependency-version: 3.20.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

14710 of 27957 relevant lines covered (52.62%)

0.53 hits per line

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

0.0
/src/main/java/com/fincatto/documentofiscal/utils/DFCadeiaCertificados.java
1
package com.fincatto.documentofiscal.utils;
2

3
import com.fincatto.documentofiscal.DFAmbiente;
4
import com.fincatto.documentofiscal.DFLog;
5
import com.fincatto.documentofiscal.cte300.classes.CTAutorizador31;
6
import com.fincatto.documentofiscal.cte400.classes.CTAutorizador400;
7
import com.fincatto.documentofiscal.mdfe3.classes.MDFAutorizador3;
8
import com.fincatto.documentofiscal.nfe310.classes.NFAutorizador31;
9
import com.fincatto.documentofiscal.nfe400.classes.NFAutorizador400;
10
import org.apache.commons.lang3.StringUtils;
11

12
import javax.net.ssl.*;
13
import java.io.ByteArrayOutputStream;
14
import java.net.URI;
15
import java.security.KeyStore;
16
import java.security.MessageDigest;
17
import java.security.cert.CertificateException;
18
import java.security.cert.X509Certificate;
19

20
public abstract class DFCadeiaCertificados implements DFLog {
×
21
    
22
    private static final int PORT = 443;
23
    private static final String PROTOCOL = "TLSv1.2";
24
    
25
    public static byte[] geraCadeiaCertificados(final DFAmbiente ambiente, final String senha) throws Exception {
26
        final KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
×
27
        keyStore.load(null, senha.toCharArray());
×
28
        try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
×
29
    
30
                /*//nao eh mais usado
31
            for (final NFAutorizador31 aut : NFAutorizador31.values()) {
32
                // Para NFe...
33
                final String urlNF = aut.getNfeStatusServico(ambiente);
34
                if (StringUtils.isNotBlank(urlNF)) {
35
                    final String host = new URI(urlNF).getHost();
36
                    DFCadeiaCertificados.get(keyStore, host);
37
                }
38
        
39
                // Para NFCe...
40
                final String urlNFC = aut.getNfceStatusServico(ambiente);
41
                if (StringUtils.isNotBlank(urlNFC)) {
42
                    final String host = new URI(urlNFC).getHost();
43
                    DFCadeiaCertificados.get(keyStore, host);
44
                }
45
            }
46
            */
47
    
48
            for (final NFAutorizador400 aut : NFAutorizador400.values()) {
×
49
                // Para NFe...
50
                final String urlNF = aut.getNfeStatusServico(ambiente);
×
51
                if (StringUtils.isNotBlank(urlNF)) {
×
52
                    final String host = new URI(urlNF).getHost();
×
53
                    DFCadeiaCertificados.get(keyStore, host);
×
54
                }
55
        
56
                // Para NFCe...
57
                final String urlNFC = aut.getNfceStatusServico(ambiente);
×
58
                if (StringUtils.isNotBlank(urlNFC)) {
×
59
                    final String host = new URI(urlNFC).getHost();
×
60
                    DFCadeiaCertificados.get(keyStore, host);
×
61
                }
62
            }
63
            
64
            //URLs especificas do AN (www.fazenda.gov.br e www1.fazenda.gov.br)
65
            final String urlNF1 = NFAutorizador400.AN.getRecepcaoEventoAN(ambiente);
×
66
            if (StringUtils.isNotBlank(urlNF1)) {
×
67
                final String host = new URI(urlNF1).getHost();
×
68
                DFCadeiaCertificados.get(keyStore, host);
×
69
            }
70
            final String urlNF2 = NFAutorizador400.AN.getNFeDistribuicaoDFe(ambiente);
×
71
            if (StringUtils.isNotBlank(urlNF2)) {
×
72
                final String host = new URI(urlNF2).getHost();
×
73
                DFCadeiaCertificados.get(keyStore, host);
×
74
            }
75
    
76
            // MDFE
77
            for (final MDFAutorizador3 aut : MDFAutorizador3.values()) {
×
78
                final String urlMDFe = aut.getMDFeStatusServico(ambiente);
×
79
                if (StringUtils.isNotBlank(urlMDFe)) {
×
80
                    final String host = new URI(urlMDFe).getHost();
×
81
                    DFCadeiaCertificados.get(keyStore, host);
×
82
                }
83
            }
84
    
85
            // CTe
86
            for (final CTAutorizador31 aut : CTAutorizador31.values()) {
×
87
                final String urlCTe = aut.getCteStatusServico(ambiente);
×
88
                if (StringUtils.isNotBlank(urlCTe)) {
×
89
                    final String host = new URI(urlCTe).getHost();
×
90
                    DFCadeiaCertificados.get(keyStore, host);
×
91
                }
92
            }
93

94
            // CTe 4.00
95
            for (final CTAutorizador400 aut : CTAutorizador400.values()) {
×
96
                final String urlCTe = aut.getCteStatusServico(ambiente);
×
97
                if (StringUtils.isNotBlank(urlCTe)) {
×
98
                    final String host = new URI(urlCTe).getHost();
×
99
                    DFCadeiaCertificados.get(keyStore, host);
×
100
                }
101
            }
102
    
103
            keyStore.store(out, senha.toCharArray());
×
104
            return out.toByteArray();
×
105
        }
106
    }
107
    
108
    private static void get(final KeyStore keyStore, final String host) throws Exception {
109
        final TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
×
110
        trustManagerFactory.init(keyStore);
×
111
        
112
        final X509TrustManager defaultTrustManager = (X509TrustManager) trustManagerFactory.getTrustManagers()[0];
×
113
        final SavingTrustManager savingTrustManager = new SavingTrustManager(defaultTrustManager);
×
114
        
115
        final SSLContext sslContext = SSLContext.getInstance(DFCadeiaCertificados.PROTOCOL);
×
116
        sslContext.init(null, new TrustManager[]{savingTrustManager}, null);
×
117
        
118
        DFLog.getLogger(DFCadeiaCertificados.class).debug("Abrindo conexao para o servidor: {}:{}", host, DFCadeiaCertificados.PORT);
×
119
        try (SSLSocket sslSocket = (SSLSocket) sslContext.getSocketFactory().createSocket(host, DFCadeiaCertificados.PORT)) {
×
120
            sslSocket.setSoTimeout(10000);
×
121
            sslSocket.startHandshake();
×
122
        } catch (final Exception e) {
×
123
            DFLog.getLogger(DFCadeiaCertificados.class).error(String.format("[%s] %s", host, e.toString()));
×
124
        }
×
125
        
126
        // se conseguir obter a cadeia de certificados, adiciona no keystore
127
        if (savingTrustManager.chain != null) {
×
128
            DFLog.getLogger(DFCadeiaCertificados.class).debug("Certificados enviados pelo servidor: {}", savingTrustManager.chain.length);
×
129
            final MessageDigest sha1 = MessageDigest.getInstance("SHA1");
×
130
            final MessageDigest md5 = MessageDigest.getInstance("MD5");
×
131
            for (int i = 0; i < savingTrustManager.chain.length; i++) {
×
132
                final X509Certificate certificate = savingTrustManager.chain[i];
×
133
                sha1.update(certificate.getEncoded());
×
134
                md5.update(certificate.getEncoded());
×
135
    
136
                final String alias = String.format("%s.%s", host, i + 1);
×
137
                keyStore.setCertificateEntry(alias, certificate);
×
138
                DFLog.getLogger(DFCadeiaCertificados.class).debug("Adicionado certificado no keystore com o alias: {}", alias);
×
139
            }
140
        }
141
    }
×
142
    
143
    private static class SavingTrustManager implements X509TrustManager {
144
        private final X509TrustManager trustManager;
145
        private X509Certificate[] chain;
146
        
147
        SavingTrustManager(final X509TrustManager trustManager) {
×
148
            this.trustManager = trustManager;
×
149
        }
×
150
        
151
        @Override
152
        public X509Certificate[] getAcceptedIssuers() {
153
            return this.trustManager.getAcceptedIssuers();
×
154
        }
155
        
156
        @Override
157
        public void checkClientTrusted(final X509Certificate[] chain, final String authType) throws CertificateException {
158
            this.trustManager.checkClientTrusted(chain, authType);
×
159
        }
×
160
        
161
        @Override
162
        public void checkServerTrusted(final X509Certificate[] chain, final String authType) throws CertificateException {
163
            this.chain = chain;
×
164
            this.trustManager.checkServerTrusted(chain, authType);
×
165
        }
×
166
    }
167
}
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