Relatório técnico
Conexão SMTP
Cliente: Foco Diagnóstico | Infraestrutura: Servidor Unbox
Responsável pela análise: Marco Moura - Unbox Tecnologia
Data: 29/09/2026 | Horário de referência: Brasília (UTC-3)
1. Objetivo e resultado da análise
Investigar os impedimentos relatados pela equipe de suporte da Vertis na integração da rotina de envio de laudos com a conta de e-mail do Foco Diagnóstico. Foram analisadas a conversa de 22 e 29/09/2026, as telas do DirectAdmin e os resultados de testes executados no computador do responsável pela análise.
Resultado: a porta 587 respondeu aos comandos SMTP e aceitou STARTTLS. Nas duas negociações TLS consultadas, o servidor apresentou certificados dentro do período de validade. Esses resultados não reproduziram a indicação de certificado expirado recebida pela ferramenta da Vertis. A causa da divergência permanece em investigação; login e envio de mensagens ainda não foram testados nesta análise.
2. Configuração de referência
| Item | Valor |
|---|---|
| Domínio | laboratoriofocodiagnostico.com.br |
| Servidor SMTP | mail.laboratoriofocodiagnostico.com.br |
| Endereço alternativo relatado | smtp.laboratoriofocodiagnostico.com.br |
| Porta / segurança | 587 / STARTTLS |
| Conta de integração | resultado@laboratoriofocodiagnostico.com.br |
| IP confirmado na consulta DNS | 186.209.113.111 |
| Identificação SMTP do servidor | pro125.dnspro.net.br / Exim 4.100 |
3. Primeiro erro relatado - 22/09/2026
O log da rotina registrou as etapas “Conectando”, “Autenticando” e “Enviando mensagem”, seguidas da resposta:
R1: HELO should be a FQDN or address literal (See RFC 2821 4.1.1.1)
A resposta indica recusa da identificação HELO/EHLO enviada pelo cliente SMTP. O trecho não informa o valor transmitido nem mostra o diálogo SMTP completo. As mensagens de progresso da aplicação, isoladamente, não comprovam autenticação bem-sucedida ou aceitação da mensagem pelo servidor.
4. Orientações e segundo erro relatado
Sobre HELO/EHLO: foi orientado verificar na biblioteca SMTP a identificação do cliente, mantendo o servidor de conexão e o usuário da conta. A equipe informou que a interface permite preencher apenas servidor, porta, usuário e senha. Isso não permite concluir que a biblioteca interna não ofereça configuração de HELO/EHLO. O nome “sistema.laboratoriofocodiagnostico.com.br” foi apenas um exemplo; sua existência no DNS não foi verificada.
Teste alternativo sugerido: foi mencionada a porta 465 com TLS implícito. Não foi apresentado resultado desse teste. A troca entre 587/STARTTLS e 465/TLS implícito não corrige, por si só, uma identificação HELO/EHLO inadequada.
Em 29/09, às 15:02: a ferramenta de diagnóstico da Vertis informou conexão e saudação EHLO/HELO estabelecidas, resposta SMTP 220 após STARTTLS e o erro “O certificado apresentado por mail.laboratoriofocodiagnostico.com.br está expirado”. A equipe relatou falha também com smtp.laboratoriofocodiagnostico.com.br, mas não forneceu os detalhes do certificado recebido ou o log completo desse segundo endereço.
5. Verificações realizadas no servidor Unbox
| Verificação | Evidência e resultado |
|---|---|
| Certificado no DirectAdmin | Painel indicou certificado válido, renovação automática, emissão em 05/09/2026 às 00:22 e vencimento em 04/12/2026 às 00:22. Nomes incluídos: domínio principal, ftp, mail, pop, smtp, webmail e www. |
| Consulta DNS no Windows | nslookup mail.laboratoriofocodiagnostico.com.br retornou 186.209.113.111, coincidente com o IP da conta no painel. Foi consultado o resolvedor Google; a resposta não era autoritativa. |
| Disponibilidade de OpenSSL | O comando openssl version não foi reconhecido no computador local. Foi adotado diagnóstico via PowerShell/.NET, sem instalação de software. |
| SMTP / STARTTLS às 23:05 | Conexão na porta 587: saudação 220; EHLO teste.unboxtecnologia.com.br aceito com 250; STARTTLS anunciado e aceito com “220 TLS go ahead”. Negociação TLS concluída. |
| Certificado com nome do domínio | Subject: CN=ftp.laboratoriofocodiagnostico.com.br. Emissor: YE1 / Let’s Encrypt. Emissão: 05/09/2026 00:22:11. Vencimento: 04/12/2026 00:22:10. |
| SMTP / TLS às 23:14 | Mesma conexão e porta; negociação TLS usando pro125.dnspro.net.br. Subject: CN=pro125.dnspro.net.br. Emissor: YE2 / Let’s Encrypt. Emissão: 25/09/2026 05:07:44. Vencimento: 24/12/2026 05:07:43. |
As datas e os horários acima foram transcritos do painel e das saídas locais dos testes. O CN com prefixo ftp não constitui, isoladamente, incompatibilidade: o painel mostra mail e smtp entre os nomes adicionais do certificado. Não foi feita validação programática desses nomes neste diagnóstico.
6. Evidências dos certificados recebidos
Negociação usando mail.laboratoriofocodiagnostico.com.br
Impressão digital SHA-1 (Thumbprint):
EF96F8126D6AF0C9AB8268EFE14A1EE4D8FA353C
Negociação usando pro125.dnspro.net.br
Impressão digital SHA-1 (Thumbprint):
B1BB4027A0EC8ACF1F00BB419562CEEAD3DE6C85
7. Conclusões e limites
1. O endereço mail consultado aponta para o IP informado no painel e o serviço SMTP respondeu na porta 587 a partir da rede usada no teste.
2. O servidor aceitou o EHLO utilizado no diagnóstico e iniciou TLS por STARTTLS.
3. Os dois certificados recebidos estavam dentro da validade em 29/09/2026. O erro de certificado expirado não foi reproduzido nessas condições.
4. O erro de HELO de 22/09 e o erro de TLS de 29/09 são falhas distintas. O diagnóstico posterior foi feito com outra ferramenta e não comprova que a rotina original tenha sido corrigida.
5. Não há evidência suficiente para atribuir a causa a uma configuração da Unbox ou a uma falha da Vertis.
Limite relevante: o script aceitou o certificado na conexão de diagnóstico para permitir sua leitura. Assim, a negociação concluída não comprova confiança da cadeia, correspondência do hostname, revogação ou autenticação SMTP. Não foram testados envio, entrega, porta 465, IPv6, acesso a partir da rede da Vertis ou conexão sem SNI. Nenhuma configuração da hospedagem foi alterada durante as verificações.
8. Hipóteses e próximos passos
Hipóteses ainda não confirmadas: seleção de certificado diferente por SNI; conexão a outro destino no ambiente da Vertis; relógio incorreto nesse ambiente; cadeia de confiança ou validação da ferramenta; ou mudança de estado entre o teste das 15:02 e os testes das 23h. A validade dos certificados consultados enfraquece, mas não elimina, a hipótese de outro certificado expirado.
Próxima ação: executar o mesmo diagnóstico no computador ou servidor em que ocorre a falha da Vertis e comparar Subject, Issuer, NotBefore, NotAfter e Thumbprint. Registrar data/hora do equipamento, IP resolvido e nome/versão da ferramenta. Solicitar o log detalhado da negociação TLS e o HELO/EHLO enviado pela rotina original, sem incluir senhas ou dados dos laudos.
Após a comparação: validar certificado, hostname e cadeia sem ignorar erros; testar autenticação; realizar envio controlado autorizado pelo cliente e conferir recebimento. Se for identificado certificado incorreto no servidor, corrigir sua seleção ou renovação. Se for identificado comportamento da biblioteca SMTP, ajustar a integração junto à Vertis.
9. Referências técnicas
DirectAdmin - mail_sni e certificados por domínio:
https://docs.directadmin.com/directadmin/general-usage/all-directadmin-conf-values.html
DirectAdmin - Exim e certificado padrão:
https://docs.directadmin.com/other-hosting-services/exim/
Microsoft - SslStream e validação de certificados:
https://learn.microsoft.com/dotnet/api/system.net.security.sslstream
Documento elaborado com base nas evidências disponíveis até 29/09/2026 às 23:14. Credenciais, chaves privadas e conteúdo de laudos foram omitidos.
10. Roteiro de testes para a equipe de desenvolvimento
Objetivo: reproduzir a conexão a partir do ambiente da Vertis e comparar o certificado recebido com os testes da Unbox. Execute no computador, servidor ou contêiner que realmente realiza o envio dos laudos. Testar apenas no notebook do suporte pode produzir um resultado diferente da aplicação.
Se o sistema roda como serviço, registre a conta de execução, a versão da biblioteca SMTP e a versão do sistema operacional/runtime. DNS, rede e certificados confiáveis podem variar conforme o ambiente e a conta utilizada. Os comandos abaixo consultam a conexão e o certificado; não usam senha e não enviam laudos.
10.1. Windows: conferir relógio, DNS e acesso à porta
Abra o Windows PowerShell, sem necessidade de executar como administrador. Cole os comandos abaixo. Confira a data e hora usando uma referência confiável; uma data futura incorreta pode fazer um certificado vigente parecer expirado.
Get-Date -Format "yyyy-MM-dd HH:mm:ss zzz"
Get-TimeZone | Select-Object Id, DisplayName
$PSVersionTable.PSVersion
nslookup mail.laboratoriofocodiagnostico.com.br
nslookup smtp.laboratoriofocodiagnostico.com.br
Test-NetConnection mail.laboratoriofocodiagnostico.com.br -Port 587 -InformationLevel Detailed
Como funciona: Get-Date e Get-TimeZone mostram relógio e fuso; nslookup consulta o destino de cada nome; Test-NetConnection testa a abertura da conexão TCP na porta 587. Esse último comando não valida TLS nem senha.
O que comparar: no teste Unbox, mail resolveu para 186.209.113.111. Registre todos os endereços recebidos, inclusive IPv6, se houver. TcpTestSucceeded: True indica acesso TCP; False exige investigar rede/firewall e disponibilidade antes de analisar o certificado. Falha de ping isolada não comprova bloqueio da porta SMTP.
10.2. Windows: consultar SMTP, TLS e certificados
Cole todo o bloco abaixo de uma vez. Não execute apenas a linha AuthenticateAsClient: as variáveis e a conexão são criadas dentro do bloco. O roteiro faz três conexões separadas na porta 587: mail com seu nome TLS, smtp com seu nome TLS e mail com o nome TLS do servidor.
& {
function Test-SmtpCertificate {
param([string]$SmtpServer, [string]$TlsName)
$tcp = [System.Net.Sockets.TcpClient]::new()
$ssl = $null
Write-Host "`n=== Destino: ${SmtpServer}:587 | Nome TLS: $TlsName ==="
try {
$pending = $tcp.ConnectAsync($SmtpServer, 587)
if (-not $pending.Wait(10000)) { throw "Tempo de conexão excedido (10 s)." }
Write-Host "IP conectado: $($tcp.Client.RemoteEndPoint)"
$stream = $tcp.GetStream()
$stream.ReadTimeout = 15000
$stream.WriteTimeout = 15000
$reader = [System.IO.StreamReader]::new($stream)
$writer = [System.IO.StreamWriter]::new($stream)
$writer.NewLine = "`r`n"
$writer.AutoFlush = $true
function Read-SmtpReply {
do {
$line = $reader.ReadLine()
if ($null -eq $line) { throw "Servidor encerrou a conexão." }
Write-Host $line
} while ($line -match '^\d{3}-')
return $line
}
$reply = Read-SmtpReply
if ($reply -notmatch '^220 ') { throw "Saudação inesperada." }
$writer.WriteLine("EHLO teste.unboxtecnologia.com.br")
$reply = Read-SmtpReply
if ($reply -notmatch '^250 ') { throw "EHLO não foi aceito." }
$writer.WriteLine("STARTTLS")
$reply = Read-SmtpReply
if ($reply -notmatch '^220 ') { throw "STARTTLS não foi aceito." }
$callback = [System.Net.Security.RemoteCertificateValidationCallback] {
param($sender, $certificate, $chain, $errors)
Write-Host "Validação do Windows (SslPolicyErrors): $errors"
if ($chain) {
foreach ($status in $chain.ChainStatus) {
Write-Host "Cadeia: $($status.Status) - $($status.StatusInformation.Trim())"
}
}
# Aceita apenas nesta consulta, para ler mesmo um certificado inválido.
return $true
}
$ssl = [System.Net.Security.SslStream]::new($stream, $false, $callback)
$ssl.ReadTimeout = 15000
$ssl.WriteTimeout = 15000
$ssl.AuthenticateAsClient($TlsName)
Write-Host "Protocolo negociado: $($ssl.SslProtocol)"
$cert = [System.Security.Cryptography.X509Certificates.X509Certificate2]::new(
$ssl.RemoteCertificate
)
$cert | Format-List Subject, Issuer, NotBefore, NotAfter, Thumbprint
foreach ($extension in $cert.Extensions) {
if ($extension.Oid.Value -eq "2.5.29.17") {
Write-Host "Nomes adicionais (SAN):"
Write-Host ($extension.Format($true))
}
}
Write-Host "Consulta concluída; autenticação e envio não foram testados."
}
catch { Write-Host "ERRO: $($_.Exception.Message)" }
finally {
if ($ssl) { $ssl.Dispose() }
$tcp.Dispose()
}
}
Test-SmtpCertificate -SmtpServer "mail.laboratoriofocodiagnostico.com.br" -TlsName "mail.laboratoriofocodiagnostico.com.br"
Test-SmtpCertificate -SmtpServer "smtp.laboratoriofocodiagnostico.com.br" -TlsName "smtp.laboratoriofocodiagnostico.com.br"
Test-SmtpCertificate -SmtpServer "mail.laboratoriofocodiagnostico.com.br" -TlsName "pro125.dnspro.net.br"
}
Etapas executadas: conexão TCP → leitura da saudação 220 → EHLO → resposta 250 → STARTTLS → resposta 220 → negociação TLS → leitura do certificado público. O nome de EHLO identifica o cliente SMTP; o nome TLS identifica o servidor esperado e permite a seleção de certificado por SNI. São funções diferentes e não devem ser confundidas com o usuário de e-mail.
O teste usa o EHLO de diagnóstico teste.unboxtecnologia.com.br, aceito no teste Unbox. Isso não comprova que o HELO/EHLO gerado pelo sistema original esteja correto. Para investigar a falha de 22/09, é necessário registrar o valor realmente enviado pela aplicação.
Atenção ao resultado: o callback permite continuar somente nesta consulta para exibir um certificado mesmo quando há erro. SslPolicyErrors: None significa que o Windows não apontou erros de nome ou cadeia nessa negociação, nas condições locais desse teste. Outros valores e as linhas “Cadeia” devem ser enviados completos para análise. A consulta não solicita uma checagem explícita de revogação e não substitui a validação pela biblioteca usada em produção.
Não copie a aceitação incondicional do certificado para a rotina de envio. Na aplicação, mantenha a validação TLS ativada. “Consulta concluída” significa apenas que os dados foram obtidos, não que o certificado foi aprovado ou que o envio funciona.
10.3. Como interpretar e comparar
| Sinal observado | Interpretação / ação |
|---|---|
| NotAfter anterior à data correta do teste | Certificado recebido está vencido. Informar Subject, Issuer, Thumbprint, nome TLS e IP conectado para localizar o certificado correspondente. |
| NotTimeValid na cadeia | Algum certificado da cadeia está fora da validade ou o relógio está incorreto. O erro não prova que o certificado final do domínio seja o vencido. |
| RemoteCertificateNameMismatch | O nome esperado não corresponde ao certificado recebido. Conferir SAN, hostname configurado e seleção por SNI. |
| RemoteCertificateChainErrors | Há problema de cadeia/confiança/validade. Ler os detalhes de ChainStatus; não tratar automaticamente como expiração. |
| Thumbprint diferente do teste Unbox | Foi recebido outro certificado. Investigar destino DNS, SNI, intermediários de rede ou renovação ocorrida entre os testes. |
| PowerShell sem erros, aplicação com falha | Comparar biblioteca, conta de execução, repositório de CAs, nome TLS/SNI, horário e configuração da aplicação. O resultado do Windows não comprova o comportamento de outra biblioteca. |
Referência Unbox em 29/09/2026:
mail: vencimento 04/12/2026 00:22:10; Thumbprint EF96F8126D6AF0C9AB8268EFE14A1EE4D8FA353C.
Nome TLS pro125: vencimento 24/12/2026 05:07:43; Thumbprint B1BB4027A0EC8ACF1F00BB419562CEEAD3DE6C85. O endpoint smtp ainda não foi testado diretamente pela Unbox neste relatório. Após uma renovação, é esperado que a impressão digital mude.
10.4. Alternativa em Linux / contêiner com OpenSSL
Se o envio é realizado em Linux, execute dentro do mesmo ambiente da aplicação. Os comandos abaixo pressupõem OpenSSL instalado e um shell compatível. Use o teste abaixo em vez do roteiro Windows.
date -Iseconds
openssl version
getent ahosts mail.laboratoriofocodiagnostico.com.br
openssl s_client -connect mail.laboratoriofocodiagnostico.com.br:587 -starttls smtp -name teste.unboxtecnologia.com.br -servername mail.laboratoriofocodiagnostico.com.br -verify_hostname mail.laboratoriofocodiagnostico.com.br -verify_return_error -showcerts </dev/null
Como funciona: -starttls smtp inicia TLS após o diálogo SMTP; -name define o EHLO; -servername envia o nome SNI; -verify_hostname verifica o nome no certificado; -verify_return_error interrompe a negociação se a validação falhar; -showcerts exibe a cadeia fornecida pelo servidor. A validação depende das autoridades confiáveis instaladas nesse ambiente. Nenhuma credencial é usada.
Para comparar o comportamento sem SNI, execute este segundo comando. Ele mantém a validação do nome mail e pode revelar um certificado padrão incompatível com esse nome. Uma incompatibilidade nessa condição deve ser interpretada junto à configuração do cliente, sem concluir automaticamente que o certificado está vencido.
openssl s_client -connect mail.laboratoriofocodiagnostico.com.br:587 -starttls smtp -name teste.unboxtecnologia.com.br -noservername -verify_hostname mail.laboratoriofocodiagnostico.com.br -verify_return_error -showcerts </dev/null
Registre o resultado completo, incluindo Verify return code, quando exibido, e as mensagens de erro. Caso a conexão fique aguardando, encerre com Ctrl+C e informe a última linha apresentada. Não alterar porta ou desativar validação como tentativa de corrigir um resultado ainda não identificado.
10.5. Verificar a rotina original e devolver as evidências
- Ativar o log de diagnóstico SMTP/TLS da biblioteca e reproduzir uma tentativa controlada, com a validação de certificado ativada.
- Registrar servidor e IP efetivo, porta, STARTTLS, versão da biblioteca e nome enviado por SNI. Registrar o HELO/EHLO antes e, se houver, depois de STARTTLS.
- Enviar à Unbox as saídas dos comandos, data/hora/fuso e o erro completo da ferramenta. Omitir senhas, tokens, comandos AUTH com conteúdo, dados de pacientes e laudos.
- Após resolver a validação TLS, testar autenticação usando a conta configurada e um envio de mensagem de teste sem dados clínicos, para destinatário autorizado pelo cliente. Registrar a resposta final de aceitação e confirmar o recebimento.
Critério de conclusão: validação TLS aprovada na própria aplicação, autenticação confirmada, mensagem de teste aceita pelo SMTP e recebimento verificado. O código 220 no início da sessão ou após STARTTLS não comprova envio ou entrega.
Referências dos comandos: Microsoft - Test-NetConnection · OpenSSL - s_client. Este roteiro contém instruções para novos testes; não representa resultados já executados.