S/MIME Parte 2: Assinado, Selado e Entregue através do SparkPost
Pássaro
31 de dez. de 2018
1 min read

Principais Conclusões
Premissa: A Parte 2 passa da teoria S/MIME para a prática — demonstrando como assinar digitalmente e criptografar emails usando SparkPost como a plataforma de entrega.
Objetivo: Equipar desenvolvedores com um fluxo de trabalho leve de linha de comando para assinar mensagens saindo, verificar assinaturas e (opcionalmente) criptografar conteúdo para destinatários específicos.
Destaques:
Configuração: Instale as ferramentas de demonstração de código aberto do GitHub (com verificações automatizadas do Travis + pytest). O Pipfile gerencia todas as dependências do Python.
Chaves do remetente:
Crie um certificado autoassinado ou emitido por CA (
.p12) para sua identidade de email.Divida-o em arquivos privados (
.pem) e públicos (.crt) para uso pela ferramenta de assinatura.
Assinatura:
Use o script incluído
sparkpostSMIME.pypara assinar mensagens de teste (por exemplo,tests/declaration.eml).Confirme as assinaturas visualmente em clientes como Thunderbird (ícone de ponto vermelho).
Criptografia:
Obtenha o certificado público de cada destinatário (
.crt).Executar a ferramenta novamente para produzir uma mensagem assinada + criptografada.
Destinatários podem verificar e descriptografar usando suas chaves privadas.
Entrega via SparkPost:
Configure um domínio de envio válido e uma chave de API.
Envie mensagens através da API do SparkPost com rastreamento desabilitado para preservar a integridade.
Utilitário bônus – mimeshow:
Exibe a estrutura MIME RFC822 legível por humanos para depuração ou inspeção.
Dicas práticas:
Mantenha nomes de arquivos alinhados com o endereço From:
Evite modificar corpos de mensagens após a assinatura.
Use Bcc apenas para cópias de arquivamento — esses destinatários não podem descriptografar se o email for criptografado para um único endereço To.
Destaques de Perguntas e Respostas
Por que usar assinatura S/MIME?
Isso autentica o remetente e garante a integridade da mensagem — clientes como o Thunderbird mostram um indicador visual quando a assinatura é válida.
Como eu consigo meu certificado de remetente?
Ou assine você mesmo via OpenSSL (para testes) ou obtenha um certificado confiável de provedores como a Comodo (grátis para uso não comercial).
Posso criptografar mensagens para múltiplos destinatários?
Somente se você tiver a chave pública de cada destinatário. O script de demonstração criptografa para o único endereço To por padrão.
Quais salvaguardas impedem que as assinaturas se quebrem durante o transporte?
A ferramenta define as opções da API do SparkPost para envio transacional e desabilita o rastreamento de aberturas/cliques, para que o payload passe sem alterações.
Qual é o papel do mimeshow?
Ele analisa arquivos de email brutos e imprime sua estrutura multipart – útil para inspecionar assinaturas S/MIME, anexos e cabeçalhos.
O que vem a seguir na série?
A Parte 3 estende essas capacidades S/MIME para plataformas de email seguro locais como PowerMTA e Momentum.
Na parte 1, fizemos uma rápida introdução ao S/MIME, analisando a assinatura e a criptografia de nossos fluxos de mensagens em uma variedade de clientes de email. As mensagens S/MIME podem ser assinadas (dando prova da identidade do remetente), criptografadas (mantendo o corpo da mensagem em segredo) ou ambas.

Nesta edição, nós iremos:
Instalar algumas ferramentas simples de linha de comando para assinar e criptografar e-mails
Obter sua chave / certificado de remetente para assinar
Enviar uma mensagem assinada via SparkPost e ver a mensagem recebida
Opcionalmente, obter seu certificado de destinatário para criptografia
Enviar uma mensagem assinada e criptografada via SparkPost e ver a mensagem recebida
Tentar uma ferramenta independente útil chamada “mimeshow” para olhar os internos de arquivos de e-mail.
OK – vamos começar!

Nesta edição, nós iremos:
Instalar algumas ferramentas simples de linha de comando para assinar e criptografar e-mails
Obter sua chave / certificado de remetente para assinar
Enviar uma mensagem assinada via SparkPost e ver a mensagem recebida
Opcionalmente, obter seu certificado de destinatário para criptografia
Enviar uma mensagem assinada e criptografada via SparkPost e ver a mensagem recebida
Tentar uma ferramenta independente útil chamada “mimeshow” para olhar os internos de arquivos de e-mail.
OK – vamos começar!

Nesta edição, nós iremos:
Instalar algumas ferramentas simples de linha de comando para assinar e criptografar e-mails
Obter sua chave / certificado de remetente para assinar
Enviar uma mensagem assinada via SparkPost e ver a mensagem recebida
Opcionalmente, obter seu certificado de destinatário para criptografia
Enviar uma mensagem assinada e criptografada via SparkPost e ver a mensagem recebida
Tentar uma ferramenta independente útil chamada “mimeshow” para olhar os internos de arquivos de e-mail.
OK – vamos começar!
Recurso bônus: exibindo partes MIME com “mimeshow”
Os internos de arquivos multipart de MIME RFC822 são bastante complexos para serem lidos por humanos. O projeto inclui uma ferramenta independente para facilitar isso, chamada mimeshow.
Isso aceita quaisquer arquivos de email que você tenha (não apenas os S/MIME) e mostra a estrutura interna. Aqui está um exemplo:
./mimeshow.py testcases/img_and_attachment.eml
Você verá:
To Bob <bob.lumreeker@gmail.com> From Steve <steve@thetucks.com> Subject Testing attachments etc MIME-Version 1.0 Content-Type multipart/mixed; boundary="------------7D48652042860D0098C65210" Content-Language en-GB Content-Type multipart/alternative; boundary="------------58C0BF87598336550D70EB95" Content-Type text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding 7bit Content-Transfer-Encoding quoted-printable Content-Type text/html; charset="utf-8" Content-Type application/pdf; name="sparkpost-datasheet-tam-technical-account-management.pdf" Content-Transfer-Encoding base64 Content-Disposition attachment; filename="sparkpost-datasheet-tam-technical-account-management.pdf"
Você também pode usar como um filtro para fornecer um resumo legível por humanos da saída do sparkpostSMIME :
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt | ./mimeshow.py
Você verá:
To Bob <bob.lumreeker@gmail.com> From Steve <steve@thetucks.com> Subject Here is our declaration Content-Language en-GB MIME-Version 1.0 Content-Type application/pkcs7-mime; smime-type=enveloped-data; name=smime.p7m Content-Transfer-Encoding base64 Content-Disposition attachment; filename=smime.p7m
Os internos de arquivos multipart de MIME RFC822 são bastante complexos para serem lidos por humanos. O projeto inclui uma ferramenta independente para facilitar isso, chamada mimeshow.
Isso aceita quaisquer arquivos de email que você tenha (não apenas os S/MIME) e mostra a estrutura interna. Aqui está um exemplo:
./mimeshow.py testcases/img_and_attachment.eml
Você verá:
To Bob <bob.lumreeker@gmail.com> From Steve <steve@thetucks.com> Subject Testing attachments etc MIME-Version 1.0 Content-Type multipart/mixed; boundary="------------7D48652042860D0098C65210" Content-Language en-GB Content-Type multipart/alternative; boundary="------------58C0BF87598336550D70EB95" Content-Type text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding 7bit Content-Transfer-Encoding quoted-printable Content-Type text/html; charset="utf-8" Content-Type application/pdf; name="sparkpost-datasheet-tam-technical-account-management.pdf" Content-Transfer-Encoding base64 Content-Disposition attachment; filename="sparkpost-datasheet-tam-technical-account-management.pdf"
Você também pode usar como um filtro para fornecer um resumo legível por humanos da saída do sparkpostSMIME :
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt | ./mimeshow.py
Você verá:
To Bob <bob.lumreeker@gmail.com> From Steve <steve@thetucks.com> Subject Here is our declaration Content-Language en-GB MIME-Version 1.0 Content-Type application/pkcs7-mime; smime-type=enveloped-data; name=smime.p7m Content-Transfer-Encoding base64 Content-Disposition attachment; filename=smime.p7m
Os internos de arquivos multipart de MIME RFC822 são bastante complexos para serem lidos por humanos. O projeto inclui uma ferramenta independente para facilitar isso, chamada mimeshow.
Isso aceita quaisquer arquivos de email que você tenha (não apenas os S/MIME) e mostra a estrutura interna. Aqui está um exemplo:
./mimeshow.py testcases/img_and_attachment.eml
Você verá:
To Bob <bob.lumreeker@gmail.com> From Steve <steve@thetucks.com> Subject Testing attachments etc MIME-Version 1.0 Content-Type multipart/mixed; boundary="------------7D48652042860D0098C65210" Content-Language en-GB Content-Type multipart/alternative; boundary="------------58C0BF87598336550D70EB95" Content-Type text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding 7bit Content-Transfer-Encoding quoted-printable Content-Type text/html; charset="utf-8" Content-Type application/pdf; name="sparkpost-datasheet-tam-technical-account-management.pdf" Content-Transfer-Encoding base64 Content-Disposition attachment; filename="sparkpost-datasheet-tam-technical-account-management.pdf"
Você também pode usar como um filtro para fornecer um resumo legível por humanos da saída do sparkpostSMIME :
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt | ./mimeshow.py
Você verá:
To Bob <bob.lumreeker@gmail.com> From Steve <steve@thetucks.com> Subject Here is our declaration Content-Language en-GB MIME-Version 1.0 Content-Type application/pkcs7-mime; smime-type=enveloped-data; name=smime.p7m Content-Transfer-Encoding base64 Content-Disposition attachment; filename=smime.p7m
1. Instale as ferramentas
As ferramentas de demonstração estão disponíveis no GitHub, completas com instruções de instalação. Você pode notar o logotipo de “build passando” – Travis e pytest verificam automaticamente o status da build. Note que essas ferramentas não são oficialmente suportadas pelo SparkPost, mas eu tentei torná-las robustas e fáceis de usar.
Se você tem alguma familiaridade com Python e pip, a instalação deve parecer bastante familiar. O Pipfile cuida das dependências externas automaticamente para você. Assim que estiver pronto, você pode verificar se tudo está instalado executando
./sparkpostSMIME.py -hVocê deve ver o texto de ajuda amigável. Em seguida, precisamos…
As ferramentas de demonstração estão disponíveis no GitHub, completas com instruções de instalação. Você pode notar o logotipo de “build passando” – Travis e pytest verificam automaticamente o status da build. Note que essas ferramentas não são oficialmente suportadas pelo SparkPost, mas eu tentei torná-las robustas e fáceis de usar.
Se você tem alguma familiaridade com Python e pip, a instalação deve parecer bastante familiar. O Pipfile cuida das dependências externas automaticamente para você. Assim que estiver pronto, você pode verificar se tudo está instalado executando
./sparkpostSMIME.py -hVocê deve ver o texto de ajuda amigável. Em seguida, precisamos…
As ferramentas de demonstração estão disponíveis no GitHub, completas com instruções de instalação. Você pode notar o logotipo de “build passando” – Travis e pytest verificam automaticamente o status da build. Note que essas ferramentas não são oficialmente suportadas pelo SparkPost, mas eu tentei torná-las robustas e fáceis de usar.
Se você tem alguma familiaridade com Python e pip, a instalação deve parecer bastante familiar. O Pipfile cuida das dependências externas automaticamente para você. Assim que estiver pronto, você pode verificar se tudo está instalado executando
./sparkpostSMIME.py -hVocê deve ver o texto de ajuda amigável. Em seguida, precisamos…
2. Obtenha sua chave / certificado de remetente para assinatura
Se você já tem um arquivo de chave para sua identidade de envio, pode pular para a frente. Caso contrário, aqui estão duas opções para escolher:
a) Chave/certificado de teste autoassinado (não válido externamente)
Se você estiver apenas testando, pode criar certificados e chaves “autoassinados” para um endereço de e-mail usando a ferramenta de linha de comando openssl no Linux, seguindo um procedimento como este. Ao final desse processo, você terá um arquivo smime.p12. Renomeie este arquivo para combinar com sua identidade de envio, incluindo o símbolo @, por exemplo, alice@example.com.p12.
ou
b) Chaves/certificados válidos externamente
Se você quiser obter chaves/certificados válidos externamente que permitam que você assine, há uma lista de provedores aqui. Eu descobri que Comodo funciona bem (gratuito para uso não comercial), e é mais fácil do que o procedimento de autoassinatura mencionado acima. Siga o processo de inscrição, receba seu e-mail de validação e certifique-se de abrir o link no Firefox. Vá para Preferências do Firefox / Privacidade e Segurança. Role até Certificados / Visualizar Certificados:

Selecione seu certificado e use a opção “Backup” para salvar como um arquivo no formato PKCS12 (adicionando a extensão de arquivo .p12 ao nome do seu arquivo) que contém a chave privada e a cadeia de certificados públicos.

Forneça uma senha para proteger o arquivo .p12:

Gerar arquivos de chave pública (.crt) e privada (.pem) separados
Seja você usou a) ou b), agora você terá um arquivo .p12 para sua identidade de remetente. Isso é um grande passo à frente – pegue um café agora!
Agora precisamos gerar arquivos de chave pública e privada separados assim – substituindo pelo seu próprio endereço de e-mail pelo exemplo. (Mac OSX e Linux):
openssl pkcs12 -in alice\@example.com.p12 -clcerts -nokeys -out alice\@example.com.crt openssl pkcs12 -in alice\@example.com.p12 -nocerts -nodes -out alice\@example.com.pem
Você precisará inserir a senha que forneceu anteriormente. Note que aquelas barras invertidas \ são usadas para escapar o símbolo @ – não separando os nomes de um caminho de diretório (isso é uma barra normal / no Mac OSX e Linux).
Se você estiver usando Windows, há implementações do openssl disponíveis, como a MINGW64 embutida nas ferramentas de linha de comando do Git, mas eu descobri que tendia a travar. Você provavelmente achará mais fácil e rápido fazer isso no Linux e, em seguida, copiar seus arquivos. Essas mesmas ferramentas do Git para Windows vêm com um bom cliente ssh que você pode usar para fazer login em uma máquina Linux, como uma instância Amazon EC2.
2.1 Assinando uma mensagem
Já existe uma chave/certificado e arquivo de origem de e-mail fictício no diretório de testes para alice@example.com, então você pode obter algumas saídas mesmo antes de ter suas próprias chaves. Basta digitar o seguinte:
cd tests ../sparkpostSMIME.py example_email1.eml --sign
E você receberá:
To: Bob <bob@example.com> From: Alice <alice@example.com> Subject: A message MIME-Version: 1.0 Content-Type: application/x-pkcs7-mime; smime-type=signed-data; name="smime.p7m" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7m" MIIKXAYJKoZIhvcNAQcCoIIKTTCCCkkCAQExDzANBglghkgBZQMEAgEFADCCAQoGCSqGSIb3DQEH AaCB/ASB+VRvOiBCb2IgPGJvYkBleGFtcGxlLmNvbT4NCkZyb206IEFsaWNlIDxhbGljZUBleGFt : :
Você não pode realmente enviar e-mails de example.com via SparkPost, a menos que você possua aquele domínio, então o próximo passo é usar sua própria chave e enviar uma mensagem assinada do seu próprio domínio.
Se você já tem um arquivo de chave para sua identidade de envio, pode pular para a frente. Caso contrário, aqui estão duas opções para escolher:
a) Chave/certificado de teste autoassinado (não válido externamente)
Se você estiver apenas testando, pode criar certificados e chaves “autoassinados” para um endereço de e-mail usando a ferramenta de linha de comando openssl no Linux, seguindo um procedimento como este. Ao final desse processo, você terá um arquivo smime.p12. Renomeie este arquivo para combinar com sua identidade de envio, incluindo o símbolo @, por exemplo, alice@example.com.p12.
ou
b) Chaves/certificados válidos externamente
Se você quiser obter chaves/certificados válidos externamente que permitam que você assine, há uma lista de provedores aqui. Eu descobri que Comodo funciona bem (gratuito para uso não comercial), e é mais fácil do que o procedimento de autoassinatura mencionado acima. Siga o processo de inscrição, receba seu e-mail de validação e certifique-se de abrir o link no Firefox. Vá para Preferências do Firefox / Privacidade e Segurança. Role até Certificados / Visualizar Certificados:

Selecione seu certificado e use a opção “Backup” para salvar como um arquivo no formato PKCS12 (adicionando a extensão de arquivo .p12 ao nome do seu arquivo) que contém a chave privada e a cadeia de certificados públicos.

Forneça uma senha para proteger o arquivo .p12:

Gerar arquivos de chave pública (.crt) e privada (.pem) separados
Seja você usou a) ou b), agora você terá um arquivo .p12 para sua identidade de remetente. Isso é um grande passo à frente – pegue um café agora!
Agora precisamos gerar arquivos de chave pública e privada separados assim – substituindo pelo seu próprio endereço de e-mail pelo exemplo. (Mac OSX e Linux):
openssl pkcs12 -in alice\@example.com.p12 -clcerts -nokeys -out alice\@example.com.crt openssl pkcs12 -in alice\@example.com.p12 -nocerts -nodes -out alice\@example.com.pem
Você precisará inserir a senha que forneceu anteriormente. Note que aquelas barras invertidas \ são usadas para escapar o símbolo @ – não separando os nomes de um caminho de diretório (isso é uma barra normal / no Mac OSX e Linux).
Se você estiver usando Windows, há implementações do openssl disponíveis, como a MINGW64 embutida nas ferramentas de linha de comando do Git, mas eu descobri que tendia a travar. Você provavelmente achará mais fácil e rápido fazer isso no Linux e, em seguida, copiar seus arquivos. Essas mesmas ferramentas do Git para Windows vêm com um bom cliente ssh que você pode usar para fazer login em uma máquina Linux, como uma instância Amazon EC2.
2.1 Assinando uma mensagem
Já existe uma chave/certificado e arquivo de origem de e-mail fictício no diretório de testes para alice@example.com, então você pode obter algumas saídas mesmo antes de ter suas próprias chaves. Basta digitar o seguinte:
cd tests ../sparkpostSMIME.py example_email1.eml --sign
E você receberá:
To: Bob <bob@example.com> From: Alice <alice@example.com> Subject: A message MIME-Version: 1.0 Content-Type: application/x-pkcs7-mime; smime-type=signed-data; name="smime.p7m" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7m" MIIKXAYJKoZIhvcNAQcCoIIKTTCCCkkCAQExDzANBglghkgBZQMEAgEFADCCAQoGCSqGSIb3DQEH AaCB/ASB+VRvOiBCb2IgPGJvYkBleGFtcGxlLmNvbT4NCkZyb206IEFsaWNlIDxhbGljZUBleGFt : :
Você não pode realmente enviar e-mails de example.com via SparkPost, a menos que você possua aquele domínio, então o próximo passo é usar sua própria chave e enviar uma mensagem assinada do seu próprio domínio.
Se você já tem um arquivo de chave para sua identidade de envio, pode pular para a frente. Caso contrário, aqui estão duas opções para escolher:
a) Chave/certificado de teste autoassinado (não válido externamente)
Se você estiver apenas testando, pode criar certificados e chaves “autoassinados” para um endereço de e-mail usando a ferramenta de linha de comando openssl no Linux, seguindo um procedimento como este. Ao final desse processo, você terá um arquivo smime.p12. Renomeie este arquivo para combinar com sua identidade de envio, incluindo o símbolo @, por exemplo, alice@example.com.p12.
ou
b) Chaves/certificados válidos externamente
Se você quiser obter chaves/certificados válidos externamente que permitam que você assine, há uma lista de provedores aqui. Eu descobri que Comodo funciona bem (gratuito para uso não comercial), e é mais fácil do que o procedimento de autoassinatura mencionado acima. Siga o processo de inscrição, receba seu e-mail de validação e certifique-se de abrir o link no Firefox. Vá para Preferências do Firefox / Privacidade e Segurança. Role até Certificados / Visualizar Certificados:

Selecione seu certificado e use a opção “Backup” para salvar como um arquivo no formato PKCS12 (adicionando a extensão de arquivo .p12 ao nome do seu arquivo) que contém a chave privada e a cadeia de certificados públicos.

Forneça uma senha para proteger o arquivo .p12:

Gerar arquivos de chave pública (.crt) e privada (.pem) separados
Seja você usou a) ou b), agora você terá um arquivo .p12 para sua identidade de remetente. Isso é um grande passo à frente – pegue um café agora!
Agora precisamos gerar arquivos de chave pública e privada separados assim – substituindo pelo seu próprio endereço de e-mail pelo exemplo. (Mac OSX e Linux):
openssl pkcs12 -in alice\@example.com.p12 -clcerts -nokeys -out alice\@example.com.crt openssl pkcs12 -in alice\@example.com.p12 -nocerts -nodes -out alice\@example.com.pem
Você precisará inserir a senha que forneceu anteriormente. Note que aquelas barras invertidas \ são usadas para escapar o símbolo @ – não separando os nomes de um caminho de diretório (isso é uma barra normal / no Mac OSX e Linux).
Se você estiver usando Windows, há implementações do openssl disponíveis, como a MINGW64 embutida nas ferramentas de linha de comando do Git, mas eu descobri que tendia a travar. Você provavelmente achará mais fácil e rápido fazer isso no Linux e, em seguida, copiar seus arquivos. Essas mesmas ferramentas do Git para Windows vêm com um bom cliente ssh que você pode usar para fazer login em uma máquina Linux, como uma instância Amazon EC2.
2.1 Assinando uma mensagem
Já existe uma chave/certificado e arquivo de origem de e-mail fictício no diretório de testes para alice@example.com, então você pode obter algumas saídas mesmo antes de ter suas próprias chaves. Basta digitar o seguinte:
cd tests ../sparkpostSMIME.py example_email1.eml --sign
E você receberá:
To: Bob <bob@example.com> From: Alice <alice@example.com> Subject: A message MIME-Version: 1.0 Content-Type: application/x-pkcs7-mime; smime-type=signed-data; name="smime.p7m" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7m" MIIKXAYJKoZIhvcNAQcCoIIKTTCCCkkCAQExDzANBglghkgBZQMEAgEFADCCAQoGCSqGSIb3DQEH AaCB/ASB+VRvOiBCb2IgPGJvYkBleGFtcGxlLmNvbT4NCkZyb206IEFsaWNlIDxhbGljZUBleGFt : :
Você não pode realmente enviar e-mails de example.com via SparkPost, a menos que você possua aquele domínio, então o próximo passo é usar sua própria chave e enviar uma mensagem assinada do seu próprio domínio.
3. Envie uma mensagem assinada via SparkPost
Agora vamos usar um domínio de envio real, configurado conforme o Guia do Novo Usuário da SparkPost. Temos os arquivos de certificado e chave do remetente no diretório atual:
steve@thetucks.com.crt steve@thetucks.com.pem
O arquivo tests/declaration.eml está incluído no projeto. É apenas um arquivo de texto, então você pode personalizar o endereço de De: para se adequar ao seu próprio domínio de envio e o endereço de Para: para se adequar ao seu destinatário de teste. O início do arquivo se parece com isso:
Para: Bob <bob.lumreeker@gmail.com> De: Steve <steve@thetucks.com> Assunto: Aqui está nossa declaração MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: pt-BR Quando, no curso dos eventos humanos, se torna necessário …
Defina sua chave API:
export SPARKPOST_API_KEY=<<Put your API key here>
Envie o e-mail:
./sparkpostSMIME.py tests/declaration.eml --sign --send_api
Você verá:
Conexão aberta para https://api.sparkpost.com/api/v1 Enviando tests/declaration.eml De: Steve <steve@thetucks.com> Para: Bob <bob.lumreeker@gmail.com> OK - em 1,15 segundos
Um segundo ou mais tarde, o e-mail chega na caixa de entrada de Bob. O Thunderbird o exibe com um ponto vermelho no envelope, indicando uma assinatura de remetente válida.

Sucesso! Termine aquele café, você merece. Se você estiver tendo problemas, verifique se seu endereço de De: no arquivo de e-mail corresponde ao nome dos seus arquivos .crt e .pem.
Agora vamos usar um domínio de envio real, configurado conforme o Guia do Novo Usuário da SparkPost. Temos os arquivos de certificado e chave do remetente no diretório atual:
steve@thetucks.com.crt steve@thetucks.com.pem
O arquivo tests/declaration.eml está incluído no projeto. É apenas um arquivo de texto, então você pode personalizar o endereço de De: para se adequar ao seu próprio domínio de envio e o endereço de Para: para se adequar ao seu destinatário de teste. O início do arquivo se parece com isso:
Para: Bob <bob.lumreeker@gmail.com> De: Steve <steve@thetucks.com> Assunto: Aqui está nossa declaração MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: pt-BR Quando, no curso dos eventos humanos, se torna necessário …
Defina sua chave API:
export SPARKPOST_API_KEY=<<Put your API key here>
Envie o e-mail:
./sparkpostSMIME.py tests/declaration.eml --sign --send_api
Você verá:
Conexão aberta para https://api.sparkpost.com/api/v1 Enviando tests/declaration.eml De: Steve <steve@thetucks.com> Para: Bob <bob.lumreeker@gmail.com> OK - em 1,15 segundos
Um segundo ou mais tarde, o e-mail chega na caixa de entrada de Bob. O Thunderbird o exibe com um ponto vermelho no envelope, indicando uma assinatura de remetente válida.

Sucesso! Termine aquele café, você merece. Se você estiver tendo problemas, verifique se seu endereço de De: no arquivo de e-mail corresponde ao nome dos seus arquivos .crt e .pem.
Agora vamos usar um domínio de envio real, configurado conforme o Guia do Novo Usuário da SparkPost. Temos os arquivos de certificado e chave do remetente no diretório atual:
steve@thetucks.com.crt steve@thetucks.com.pem
O arquivo tests/declaration.eml está incluído no projeto. É apenas um arquivo de texto, então você pode personalizar o endereço de De: para se adequar ao seu próprio domínio de envio e o endereço de Para: para se adequar ao seu destinatário de teste. O início do arquivo se parece com isso:
Para: Bob <bob.lumreeker@gmail.com> De: Steve <steve@thetucks.com> Assunto: Aqui está nossa declaração MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: pt-BR Quando, no curso dos eventos humanos, se torna necessário …
Defina sua chave API:
export SPARKPOST_API_KEY=<<Put your API key here>
Envie o e-mail:
./sparkpostSMIME.py tests/declaration.eml --sign --send_api
Você verá:
Conexão aberta para https://api.sparkpost.com/api/v1 Enviando tests/declaration.eml De: Steve <steve@thetucks.com> Para: Bob <bob.lumreeker@gmail.com> OK - em 1,15 segundos
Um segundo ou mais tarde, o e-mail chega na caixa de entrada de Bob. O Thunderbird o exibe com um ponto vermelho no envelope, indicando uma assinatura de remetente válida.

Sucesso! Termine aquele café, você merece. Se você estiver tendo problemas, verifique se seu endereço de De: no arquivo de e-mail corresponde ao nome dos seus arquivos .crt e .pem.
4. Criptografando mensagens
Para criptografar uma mensagem, você precisa da chave pública do seu destinatário em forma de certificado. Este é um arquivo de texto que se parece com isto:
Atributos da Bag friendlyName: s COMODO CA Limited ID #2 localKeyID: 32 84 AB 9C 56 5C 80 C6 89 4D 40 46 DD D4 7C 71 E8 CD ED C1 subject=/emailAddress=bob.lumreeker@gmail.com issuer=/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Client Authentication and Secure Email CA -----BEGIN CERTIFICATE----- se parece com caracteres aleatórios aqui -----END CERTIFICATE-----
Há um certificado fictício de destinatário para bob@example.com no diretório de testes, então você pode praticar com ele antes de ter um certificado real:
cd tests ../sparkpostSMIME.py example_email1.eml --sign --encrypt
Você verá:
To: Bob <bob@example.com> From: Alice <alice@example.com> Subject: A message MIME-Version: 1.0 Content-Type: application/pkcs7-mime; smime-type=enveloped-data; name=smime.p7m Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=smime.p7m MIIRwQYJKoZIhvcNAQcDoIIRsjCCEa4CAQAxggKlMIICoQIBADCBijCBhDELMAkG :
Você notará que o comprimento da saída é bastante mais longo do que com uma mensagem criptografada porque carrega muita informação extra, além da mensagem embaralhada em si.
4.1 Enviando uma mensagem criptografada e assinada através do SparkPost
Vamos enviar uma mensagem criptografada para um endereço de e-mail real. Você pode seguir o mesmo processo que antes (autoassinado ou um provedor como a Comodo) para obter uma chave pública/certificado para os endereços de destinatários. Você só precisa do arquivo .crt – o destinatário nunca precisa te dar sua chave privada (.p12 e .pem).
Eu tenho o arquivo bob.lumreeker@gmail.com.crt para meu destinatário pretendido – correspondendo ao endereço de From: no meu arquivo.
Aqui está o comando para enviar:
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt --send_api
Eu vejo:
Conexão aberta para https://api.sparkpost.com/api/v1 Enviando tests/declaration.eml De: Steve <steve@thetucks.com> Para: Bob <bob.lumreeker@gmail.com> OK - em 1.168 segundos
O e-mail aparece no Thunderbird com o ícone de assinatura “ponto vermelho” e o ícone de criptografia “cadeado”.

Você pode enviar e-mails complexos baseados em HTML com links e imagens com a mesma facilidade, como o mostrado na Parte 1. Alguns clientes, como o Thunderbird, pedem permissão para exibir links e imagens externas em mensagens S/MIME criptografadas, mas mensagens somente assinadas são exibidas bem em clientes como Thunderbird e Gmail:


Observe que a lista suspensa mostra “Endereço de e-mail verificado”.
Para criptografar uma mensagem, você precisa da chave pública do seu destinatário em forma de certificado. Este é um arquivo de texto que se parece com isto:
Atributos da Bag friendlyName: s COMODO CA Limited ID #2 localKeyID: 32 84 AB 9C 56 5C 80 C6 89 4D 40 46 DD D4 7C 71 E8 CD ED C1 subject=/emailAddress=bob.lumreeker@gmail.com issuer=/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Client Authentication and Secure Email CA -----BEGIN CERTIFICATE----- se parece com caracteres aleatórios aqui -----END CERTIFICATE-----
Há um certificado fictício de destinatário para bob@example.com no diretório de testes, então você pode praticar com ele antes de ter um certificado real:
cd tests ../sparkpostSMIME.py example_email1.eml --sign --encrypt
Você verá:
To: Bob <bob@example.com> From: Alice <alice@example.com> Subject: A message MIME-Version: 1.0 Content-Type: application/pkcs7-mime; smime-type=enveloped-data; name=smime.p7m Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=smime.p7m MIIRwQYJKoZIhvcNAQcDoIIRsjCCEa4CAQAxggKlMIICoQIBADCBijCBhDELMAkG :
Você notará que o comprimento da saída é bastante mais longo do que com uma mensagem criptografada porque carrega muita informação extra, além da mensagem embaralhada em si.
4.1 Enviando uma mensagem criptografada e assinada através do SparkPost
Vamos enviar uma mensagem criptografada para um endereço de e-mail real. Você pode seguir o mesmo processo que antes (autoassinado ou um provedor como a Comodo) para obter uma chave pública/certificado para os endereços de destinatários. Você só precisa do arquivo .crt – o destinatário nunca precisa te dar sua chave privada (.p12 e .pem).
Eu tenho o arquivo bob.lumreeker@gmail.com.crt para meu destinatário pretendido – correspondendo ao endereço de From: no meu arquivo.
Aqui está o comando para enviar:
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt --send_api
Eu vejo:
Conexão aberta para https://api.sparkpost.com/api/v1 Enviando tests/declaration.eml De: Steve <steve@thetucks.com> Para: Bob <bob.lumreeker@gmail.com> OK - em 1.168 segundos
O e-mail aparece no Thunderbird com o ícone de assinatura “ponto vermelho” e o ícone de criptografia “cadeado”.

Você pode enviar e-mails complexos baseados em HTML com links e imagens com a mesma facilidade, como o mostrado na Parte 1. Alguns clientes, como o Thunderbird, pedem permissão para exibir links e imagens externas em mensagens S/MIME criptografadas, mas mensagens somente assinadas são exibidas bem em clientes como Thunderbird e Gmail:


Observe que a lista suspensa mostra “Endereço de e-mail verificado”.
Para criptografar uma mensagem, você precisa da chave pública do seu destinatário em forma de certificado. Este é um arquivo de texto que se parece com isto:
Atributos da Bag friendlyName: s COMODO CA Limited ID #2 localKeyID: 32 84 AB 9C 56 5C 80 C6 89 4D 40 46 DD D4 7C 71 E8 CD ED C1 subject=/emailAddress=bob.lumreeker@gmail.com issuer=/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Client Authentication and Secure Email CA -----BEGIN CERTIFICATE----- se parece com caracteres aleatórios aqui -----END CERTIFICATE-----
Há um certificado fictício de destinatário para bob@example.com no diretório de testes, então você pode praticar com ele antes de ter um certificado real:
cd tests ../sparkpostSMIME.py example_email1.eml --sign --encrypt
Você verá:
To: Bob <bob@example.com> From: Alice <alice@example.com> Subject: A message MIME-Version: 1.0 Content-Type: application/pkcs7-mime; smime-type=enveloped-data; name=smime.p7m Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=smime.p7m MIIRwQYJKoZIhvcNAQcDoIIRsjCCEa4CAQAxggKlMIICoQIBADCBijCBhDELMAkG :
Você notará que o comprimento da saída é bastante mais longo do que com uma mensagem criptografada porque carrega muita informação extra, além da mensagem embaralhada em si.
4.1 Enviando uma mensagem criptografada e assinada através do SparkPost
Vamos enviar uma mensagem criptografada para um endereço de e-mail real. Você pode seguir o mesmo processo que antes (autoassinado ou um provedor como a Comodo) para obter uma chave pública/certificado para os endereços de destinatários. Você só precisa do arquivo .crt – o destinatário nunca precisa te dar sua chave privada (.p12 e .pem).
Eu tenho o arquivo bob.lumreeker@gmail.com.crt para meu destinatário pretendido – correspondendo ao endereço de From: no meu arquivo.
Aqui está o comando para enviar:
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt --send_api
Eu vejo:
Conexão aberta para https://api.sparkpost.com/api/v1 Enviando tests/declaration.eml De: Steve <steve@thetucks.com> Para: Bob <bob.lumreeker@gmail.com> OK - em 1.168 segundos
O e-mail aparece no Thunderbird com o ícone de assinatura “ponto vermelho” e o ícone de criptografia “cadeado”.

Você pode enviar e-mails complexos baseados em HTML com links e imagens com a mesma facilidade, como o mostrado na Parte 1. Alguns clientes, como o Thunderbird, pedem permissão para exibir links e imagens externas em mensagens S/MIME criptografadas, mas mensagens somente assinadas são exibidas bem em clientes como Thunderbird e Gmail:


Observe que a lista suspensa mostra “Endereço de e-mail verificado”.
Reflexões adicionais e coisas a ter em mente
Esta ferramenta adota uma abordagem super-simples para capturar as chaves necessárias – ela apenas procura arquivos nomeados no diretório atual. Arranjos mais complexos, como manter todas as chaves em um banco de dados, poderiam ser facilmente adicionados, mas eu queria que o código fosse o mais simples possível.
Você pode incluir outros destinatários com Cc: e Bcc: e eles serão entregues; isso pode ser útil para fins de arquivamento. Mensagens assinadas são recebidas e podem ser exibidas por outros destinatários completas com a assinatura. A ferramenta remove o cabeçalho Bcc: da mensagem entregue (como um cliente de e-mail de desktop faria).
Para garantir que as mensagens passem pelo SparkPost inalteradas (o que poderia quebrar a assinatura), a ferramenta define opções de API para o envio “transacional”, com rastreamento de abertura e cliques desativado.
Se você usar criptografia, tenha em mente que a ferramenta pega o único endereço To: para isso. Os outros destinatários podem decifrar o corpo da mensagem apenas se tiverem a chave privada do destinatário To:. Se você estiver apenas usando destinatários secundários como um registro das entregas feitas, por exemplo, isso pode estar OK de qualquer maneira.
Esta ferramenta adota uma abordagem super-simples para capturar as chaves necessárias – ela apenas procura arquivos nomeados no diretório atual. Arranjos mais complexos, como manter todas as chaves em um banco de dados, poderiam ser facilmente adicionados, mas eu queria que o código fosse o mais simples possível.
Você pode incluir outros destinatários com Cc: e Bcc: e eles serão entregues; isso pode ser útil para fins de arquivamento. Mensagens assinadas são recebidas e podem ser exibidas por outros destinatários completas com a assinatura. A ferramenta remove o cabeçalho Bcc: da mensagem entregue (como um cliente de e-mail de desktop faria).
Para garantir que as mensagens passem pelo SparkPost inalteradas (o que poderia quebrar a assinatura), a ferramenta define opções de API para o envio “transacional”, com rastreamento de abertura e cliques desativado.
Se você usar criptografia, tenha em mente que a ferramenta pega o único endereço To: para isso. Os outros destinatários podem decifrar o corpo da mensagem apenas se tiverem a chave privada do destinatário To:. Se você estiver apenas usando destinatários secundários como um registro das entregas feitas, por exemplo, isso pode estar OK de qualquer maneira.
Esta ferramenta adota uma abordagem super-simples para capturar as chaves necessárias – ela apenas procura arquivos nomeados no diretório atual. Arranjos mais complexos, como manter todas as chaves em um banco de dados, poderiam ser facilmente adicionados, mas eu queria que o código fosse o mais simples possível.
Você pode incluir outros destinatários com Cc: e Bcc: e eles serão entregues; isso pode ser útil para fins de arquivamento. Mensagens assinadas são recebidas e podem ser exibidas por outros destinatários completas com a assinatura. A ferramenta remove o cabeçalho Bcc: da mensagem entregue (como um cliente de e-mail de desktop faria).
Para garantir que as mensagens passem pelo SparkPost inalteradas (o que poderia quebrar a assinatura), a ferramenta define opções de API para o envio “transacional”, com rastreamento de abertura e cliques desativado.
Se você usar criptografia, tenha em mente que a ferramenta pega o único endereço To: para isso. Os outros destinatários podem decifrar o corpo da mensagem apenas se tiverem a chave privada do destinatário To:. Se você estiver apenas usando destinatários secundários como um registro das entregas feitas, por exemplo, isso pode estar OK de qualquer maneira.
Assinado, selado, entregue… Eu sou seu
Essa é nossa visão geral rápida de como assinar, selar e entregar mensagens S/MIME através do SparkPost. Lembrete rápido: o projeto de demonstração está disponível no GitHub, e eu tentei tornar fácil de instalar e usar.
Essa é nossa visão geral rápida de como assinar, selar e entregar mensagens S/MIME através do SparkPost. Lembrete rápido: o projeto de demonstração está disponível no GitHub, e eu tentei tornar fácil de instalar e usar.
Essa é nossa visão geral rápida de como assinar, selar e entregar mensagens S/MIME através do SparkPost. Lembrete rápido: o projeto de demonstração está disponível no GitHub, e eu tentei tornar fácil de instalar e usar.



