S/MIME Parte 4: Coletando Chaves Públicas de Destinatários de Forma Simples – com Webhooks de Relé de Entrada do SparkPost
·

Principais Conclusões
Premissa: Enviar e-mail criptografado com S/MIME não é difícil uma vez que você pode coletar automaticamente a chave pública de cada destinatário. Este post fecha essa lacuna utilizando Webhooks de Relay de Entrada do SparkPost para receber e-mails assinados, extrair certificados e armazená-los para criptografia posterior.
Objetivo: Construir um serviço de webhook baseado em Flask que escute mensagens assinadas recebidas, valide-as (DKIM + verificações de certificado) e armazene com segurança cada chave pública no disco para uso em e-mails seguros enviados.
Destaques:
Problema: A troca manual de chaves não escala para e-mails gerados por aplicativos.
Solução: Convidar usuários a enviar um e-mail assinado; o webhook de entrada automaticamente analisa e armazena seu certificado PEM.
Etapas de configuração:
Configure um Domínio de Entrada e registros MX (por exemplo, inbound.seudominio.com).
Crie um Webhook de Relay de Entrada via API do SparkPost apontando para o endpoint do seu aplicativo.
Implante um pequeno aplicativo Flask (webapp.py) usando a configuração do webapp.ini.
Registre extensivamente para transparência; integre Pytest + Travis CI para validação automatizada.
Medidas de segurança:
Verifique as assinaturas DKIM e a autenticidade da mensagem.
Valide a cadeia de confiança do certificado antes de armazená-lo.
Use um token de autenticação secreto nos cabeçalhos do webhook.
Saída:
Cada mensagem de entrada válida cria um arquivo de certificado como bob.lumreeker@gmail.com.crt.
Uma vez armazenadas, essas chaves possibilitam respostas criptografadas usando scripts anteriores das partes 2 e 3.
Destaques de Perguntas e Respostas
Por que é tão crítico coletar chaves de destinatários para S/MIME?
Porque a criptografia requer a chave pública de cada destinatário; automatizar esta etapa permite que qualquer aplicativo envie e-mails seguros sem troca manual.
Como o Webhook de Relay Inbound do SparkPost simplifica a coleta de chaves?
Ele converte qualquer e-mail assinado recebido em uma carga útil JSON estruturada, permitindo que seu aplicativo analise e persista certificados programaticamente.
Quais salvaguardas evitam falsificações ou envios indesejados?
O serviço valida assinaturas DKIM, impõe tokens de autenticação e rejeita mensagens malformadas ou não assinadas.
Onde os certificados são armazenados e em qual formato?
Eles são gravados em disco no formato PEM (
.crtarquivos), prontos para uso pela ferramenta de assinatura/cripografia construída nas partes anteriores.Qual é o fluxo de trabalho do desenvolvedor?
Execute o aplicativo Flask, verifique com o Postman usando a carga útil de amostra fornecida e, em seguida, conecte-o ao webhook ao vivo do SparkPost para operação contínua.
Conclusão geral?
A gestão de chaves S/MIME pode ser totalmente automatizada com algumas linhas de Python e APIs do SparkPost—trazendo criptografia escalável para qualquer fluxo de trabalho de email gerado por aplicativo.
No parte 1, fizemos um rápido tour sobre S/MIME, olhando para a assinatura e criptografia de nossos fluxos de mensagens em uma variedade de clientes de e-mail. A parte 2 nos levou através de uma ferramenta de linha de comando simples para assinar e criptografar e-mails, e depois enviá-los através do SparkPost. A parte 3 mostrou como injetar fluxos de e-mail seguros em plataformas locais, como Port25 PowerMTA e Momentum.
Nesta série, vimos como incluir uma assinatura S/MIME é bastante simples. Enviar e-mails criptografados em S/MIME é mais complexo porque você precisa obter as chaves públicas dos destinatários. É uma coisa quando você está usando um cliente de e-mail para humanos como o Thunderbird – mas como isso pode funcionar com fluxos de e-mail gerados por aplicativos? E-mails gerados por aplicativos, como os usados por plataformas de namoro, requerem uma estratégia cuidadosa para maximizar o envolvimento. Veja como os aplicativos de namoro criam experiências de e-mail acionadas convincentes.
Mas espere – há outra maneira de entrar em Mordor para obter essas chaves. Seu serviço pode convidar seus clientes (por e-mail, é claro) a lhe enviar de volta um e-mail assinado para um endereço de atendimento ao cliente conhecido. Usando os poderes mágicos dos webhooks do SparkPost Inbound Relay, extrairemos e armazenaremos essa chave pública para você usar.
Podemos resumir isso em um caso de uso simples:
Como destinatário de mensagens, eu forneço ao seu serviço minha assinatura de e-mail pessoal via e-mail, para que no futuro, e-mails possam ser enviados para mim em forma criptografada S/MIME.
A partir disso, vamos derivar alguns requisitos mais detalhados:
Precisamos de um serviço de e-mail de entrada sempre ativo e confiável para receber esses e-mails assinados.
Não deve haver requisitos especiais quanto ao formato do e-mail, exceto que ele deve portar uma assinatura S/MIME.
Como qualquer um pode tentar enviar um e-mail para este serviço, ele deve ser projetado defensivamente, por exemplo, para rejeitar mensagens “falsificadas” de atores prejudiciais. Serão necessárias várias camadas de verificação.
Se tudo estiver OK, o serviço armazenará o certificado em um arquivo, usando o conhecido formato de e-mail melhorado em texto simples (PEM).
Existem alguns requisitos não funcionais:
Serviços de webhook máquina-a-máquina podem ser difíceis de ver apenas a partir das respostas sobre o que está acontecendo internamente. O serviço deve fornecer extensos logs em nível de aplicação legíveis por humanos. Em particular, a análise e verificação do certificado devem ser registradas.
Adicionamos casos de teste para os internos do aplicativo, usando o bom framework Pytest, e executamos esses testes automaticamente na confirmação usando a integração do Travis CI com o GitHub.
OK – vamos começar!
1. Visão geral da solução
Veja como será a solução geral.

2. Instalando, configurando e iniciando o aplicativo web
3. Configuração de webhooks de retransmissão de entrada do SparkPost
4. Internos: verificação DKIM, validação de certificado
O aplicativo verifica se os e-mails recebidos têm DKIM válidos e verifica se os próprios certificados são válidos, conforme descrito aqui. Há notas de implementação lá também, e ideias para trabalhos futuros.
Resumindo...
Vimos como chaves públicas de destinatários podem ser facilmente coletadas usando um e-mail para um endereço de webhook de relay de entrada. Uma vez feito isso, esses destinatários podem receber suas mensagens na forma criptografada S/MIME.
É isso por enquanto! Boas envios.





