O problema
Este é um problema conhecido com o Microsoft Outlook 2010 , mas é fornecida uma correção - você pode deseja notificar o remetente que ele deve aplicá-lo.
Os certificados X.509 têm vários atributos anexados, alguns deles podem ser usados para identificar certificados. Uma dessas maneiras é usar o número de série junto com o emissor do certificado (juntos, eles têm que formar um identificador único). Para mensagens criptografadas por S / MIME, isso é chamado de issuerAndSerialNumber
. Uma alternativa é o também padronizado subjectKeyIdentifier
, que "deve ser" derivado do público chave de alguma forma, mas não é especificamente definido.
O Outlook 2010 (pré-SP1) usa o subjectKeyIdentifier
e cria um, se esse identificador não for fornecido (a partir do artigo da base de conhecimento vinculado acima, realce adicionado por mim):
The Cryptographic Message Syntax (CMS) is documented in RFC 5652. That specification allows using either the subjectKeyIdentifier or issuerAndSerialNumber as the SignerIdentifier. The release (RTM) version of Outlook 2010 uses subjectKeyIdentifier as the SignerIdentifier, whereas earlier versions use issuerAndSerialNumber. If the subjectKeyIdentifier extension is not defined in the certificate, Outlook 2010 RTM generates one. Some email clients or third-party operating systems are unable to use the Outlook-generated subjectKeyIdentifier. This results in the recipient being unable to decrypt and read the message.
Em outras palavras, o Microsoft Outlook 2010 pré-SP1 usa um identificador de certificado muito provável não compreendido por nenhum outro aplicativo de email. Na verdade, falhei em usar uma versão recente do Outlook para descriptografar essa mensagem!
Como descriptografar a mensagem mesmo assim
Isso não será fácil e envolve a queda para a linha de comando. Isso deve funcionar em praticamente todos os sistemas operacionais (Linux, Windows, macOS, qualquer BSD), certifique-se de ter o OpenSSL instalado. Usando o OpenSSL, podemos impor a descriptografia usando uma chave específica, ignorando o subjectKeyIdentifier
quebrado.
- Salve a mensagem em alguma pasta (o Thunderbird a salvará como um arquivo
.eml
). Eu nomeei-omail.eml
em todos os passos adicionais. - Exporte a chave privada (abra as Preferências , Avançadas , Certificados , Ver Certificados , selecione o certificado apropriado certificado, Backup , selecione a mesma pasta usada para a mensagem). O Thunderbird irá consultar uma frase secreta. Você deve ter outro arquivo agora com a extensão
.p12
. Eu chamei decertificate.p12
. - Abra um terminal. Todas as etapas adicionais serão concluídas na linha de comando.
- Navegue até a pasta usando o comando
cd
. - Para descriptografar a mensagem, precisamos da chave privada no formato PEM. Para converter a chave, execute
openssl pkcs12 -in certificate.p12
-out privatekey.pem -nodes '. Você será perguntado pela senha que você digitou no Thunderbird. -
Agora, use a chave exportada para descriptografar a mensagem:
openssl cms -decrypt -in mail.eml -inkey privatekey.pem -out decrypted.txt
A mensagem descriptografada será armazenada no arquivo
decrypted.txt
.
É provável que a mensagem seja codificada como quoted-printable
. Se você encontrar sequências de caracteres estranhas como Gr=FC=DFe
e houver um cabeçalho Content-Transfer-Encoding: quoted-printable
incluído, converta a mensagem em texto simples (você precisa Perl, provavelmente restrito à versão 5 e o módulo MIME::QuotedPrint
):
perl -MMIME::QuotedPrint -pe '$_=MIME::QuotedPrint::decode($_);' <decrypted.txt >decoded.txt
O arquivo decoded.txt
finalmente incluirá a mensagem descriptografada. Se a codificação de caracteres especiais ainda parecer errada, use as ferramentas de conversão de sua escolha ou simplesmente tente abrir o arquivo no Firefox ou em outros navegadores - normalmente, eles fazem um ótimo trabalho ao corrigir a codificação confusa.
A criação de uma nova mensagem .eml
não criptografada exige a remoção de todos os Content-*
cabeçalhos e a movimentação de Content-*
cabeçalhos da mensagem descriptografada neste local. Mais detalhes estão fora do escopo deste tutorial, existem muitas codificações diferentes para fornecer assistência razoável.