Corrigindo starttls verify = fail, verifymsg = incapaz de obter certificado de emissor local

2

Executando o Amazon Linux na instância do EC2 com sendmail . Eu tenho uma conta de e-mail com Network Solutions e uso essa conta como um SMART_HOST em minha configuração de sendmail . Funciona bem, exceto por um pequeno detalhe.

No meu arquivo maillog , vejo entradas como esta:

sendmail[28450]: STARTTLS=client, relay=mail.example.com.netsolmail.net., version=TLSv1/SSLv3, verify=FAIL, cipher=DHE-RSA-AES256-SHA, bits=256/256

Depois de uma pequena pesquisa, cheguei à conclusão de que o verify=FAIL é essencialmente inofensivo: a conexão realmente foi criptografada, é apenas que o certificado do host não pôde ser verificado.

Como ninguém além de mim lê o arquivo de log, eu não me importo. Mas quando a mensagem chega, o cabeçalho Received mostra

Received: from unknown (HELO example.com) ([email protected]@12.34.56.78)
  by 0 with ESMTPA; 15 Aug 2016 07:10:15 -0000

Eu esperava ver with ESMPTSA , mas imagino que a falha na verificação do certificado tenha causado a supressão do 'S'.

Como posso obter mais detalhes sobre o que havia de errado com o certificado e como evitar a falha de verificação? Meu palpite é que os vários subdomínios de mail.example.com.netsolmail.net não correspondem de perto o suficiente com o nome no certificado. Mas como posso verificar isso e como posso evitar a reclamação? Ou mais exatamente como posso obter o cabeçalho Received para confirmar a conexão segura com ESMTPSA .

EDIT: eu editei sendmail.mc para adicionar

define('confLOG_LEVEL', '15')dnl

Agora o maillog dá mais detalhes. Logo após a linha verify=FAIL , vejo agora:

sendmail[30706]: STARTTLS=client, cert-subject=/OU=GT39680792/OU=See+20www.rapidssl.com/resources/cps+20+28c+2915/OU=Domain+20Control+20Validated+20-+20RapidSSL+28R+29/CN=*.hostingplatform.com, cert-issuer=/C=US/O=GeoTrust+20Inc./CN=RapidSSL+20SHA256+20CA+20-+20G3, verifymsg=unable to get local issuer certificate

Suponho que isso signifique que pelo menos uma das causas da falha na verificação é que o sendmail não consegue encontrar um certificado para a máquina local em que está sendo executado? Desde que eu estou apenas retransmitindo o correio de saída para um servidor netsol, nunca aceitando e-mails recebidos da internet, eu não acho que eu preciso ter um certificado para este servidor. Se eu precisar de um, onde / como eu o instalo? E pode ser o mesmo certificado que eu uso para o meu servidor, ou eu preciso de um diferente? O uso de um certificado auto-assinado seria bom o suficiente para fazer com que o cabeçalho Received dissesse with ESMTPSA ou precisaria ser um certificado comercial de uma autoridade de certificação?

EDIT # 2:

Estou aceitando a resposta de @MadHatter. A chave estava recebendo confCACERT definido. Estou envergonhado, minha única desculpa é o velho cérebro senil não grumindo a fonte m4. O arquivo sendmail.mc padrão no Amazon Linux já tinha

define('confCACERT_PATH', '/etc/pki/tls/certs')dnl
define('confCACERT', '/etc/pki/tls/certs/ca-bundle.crt')dnl

nele, e eu verifiquei que o arquivo existia. Mas eu não percebi o pequeno dnl sorrateiro que estava no começo dessas linhas! Eu sei o que isso significa, mas como eu raramente olho para a fonte m4, e foi logo após algumas outras linhas dnl -ed que foram marcadas como comentários com # , meu cérebro as registrou como não sendo comentado!

Na verdade, eu passei por vários gyrations baixando certs do Firefox e apontando sendmail no certificado Digicert que eu usei para o nosso site, mas como esse host só envia, nunca recebe, e-mail, nada mais era necessário. Eu coloquei de volta o dnl nas definições para confSERVER_CERT e confSERVER_KEY , e tudo estava bem, com maillog mostrando verify=OK e verifymsg=ok nas linhas STARTTLS=client apropriadas.

Mas, apesar de não haver diagnósticos sobre o TLS, o cabeçalho Received da conexão com o netsol ainda mostra with ESMTPA e não with ESMTPSA . Ah, bem, @MadHatter também tinha a droga disso. Desculpe, isso foi tão longo e uma espécie de perseguição selvagem. Mas aprendi muito e melhorei minha configuração (de maneira não vital). Espero que alguém que esteja desesperado o suficiente para aprender isso também aprenda algo.

    
por sootsnoot 16.08.2016 / 02:43

1 resposta

2

Isso é muito mais uma questão em partes, e eu entendo como tal. Eu usei sendmail como meu MTA preferido por algumas décadas, mas não posso afirmar ser um expert nele (ou seja, não sou Eric Allman).

verifymsg=unable to get local issuer certificate

I take this to mean that at least one cause of the verification failure is that sendmail can't find a certificate for the local machine it's running on?

Isso parece ser uma mensagem OpenSSL, em vez de uma MTA , e pelo que entendi isso significa que o aplicativo de verificação não consegue obter cópia local do certificado do emissor. Em outras palavras, o sendmail não tem acesso a um pacote de certificados que inclui o certificado raiz para quem emitiu o certificado do servidor remoto. Lembre-se de que o Linux não oferece um serviço centralizado de gerenciamento de certificados, portanto, cada aplicativo deve lançar seu próprio pacote. No meu caso, eu dei acesso ao sendmail para um pacote de certificado com o seguinte código m4:

define('confCACERT', '/etc/pki/tls/certs/ca-bundle.with.intermediate.crt')dnl

I was hoping to see with ESMPTSA but I would guess that the certificate verification failure caused the 'S' to be surpressed.

Acho que o palpite está errado. RFC2821 e 2822 são bastante elásticos quanto ao formato de um cabeçalho Received: e não consigo encontrar nada que distinga entre ESMTPA e ESMPTSA (sic). Todos os meus cabeçalhos mostram linhas como:

Received: from example.com (example.com [80.70.90.61])
    by lory.teaparty.net (8.14.4/8.14.4) with ESMTP id u6G25OXi006577
    (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL)
    for <[email protected]>; Sat, 16 Jul 2016 03:05:24 +0100

Para entender o que o MTA do seu receptor significa por ESMTPA , você teria que descobrir qual é esse MTA e ler a documentação. Até que você tenha feito isso, eu não acho que você pode ler muito nessa coleção de cartas.

Can I avoid starttls verify=fail when server hostname does not match certificate

Eu não acho que você pode. A ideia fundmental por trás do SSL é que (a) o nome do host ao qual você se conecta (b) oferece um certificado assinado por um terceiro confiável (c) com esse nome de host no campo CN ou SAN. Se alguma dessas propriedades não for atendida, é certo que o SSL observe que não é possível verificar a identidade do par.

Você não deve ler muito sobre isso; certificados auto-assinados ainda são muito comuns no tratamento de email. Dos meus últimos e-mails protegidos por TLS em 1919 enviados / recebidos, 1764 envolveu um par cuja identidade não pôde ser verificada por algum motivo, enquanto apenas 155 puderam. Você mesmo está executando com um certificado autoassinado; você deve, portanto, ficar feliz que a maioria das pessoas não se importe com a cadeia de confiança nos pares TLS SMTP!

    
por 16.08.2016 / 08:53