Como criptografar uma mensagem usando o arquivo SSL smime.p7s de alguém

4

Eu preciso enviar um arquivo de chave privada para alguém (um administrador confiável) com segurança. Eu sugeri algumas opções, mas ele respondeu o seguinte:

Hi, I don't have neither LastPass nor GnuPGP but I'm using ssl certificates - this message is signed with such so you will be able to send a message to me and encrypt it with my public key.

Eu usei openssl para obter seu certificado:

openssl pkcs7 -in smime.p7s -inform DER -print_certs

O certificado é emitido por:

issuer=/O=Root CA/OU=http://www.cacert.org/CN=CA Cert Signing Authority/[email protected]

(o Firefox não possui um certificado raiz do cacert.org.)

Agora, como criptografo o arquivo de chave que desejo enviar para ele? Eu prefiro usar uma ferramenta de linha de comando disponível no Ubuntu.

@lgeorget:

$ openssl pkcs7 -inform DER -outform PEM -in smime.p7s -out smime.pem
$ openssl smime -encrypt -text -in /home/myuser/.ssh/mykeyfile smime.pem 
unable to load certificate
139709295335072:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:696:Expecting: TRUSTED CERTIFICATE

e

$ openssl pkcs7 -in smime.p7s -inform DER -print_certs
subject=/CN=Wojciech Kapcia/[email protected]/[email protected]
issuer=/O=Root CA/OU=http://www.cacert.org/CN=CA Cert Signing Authority/[email protected]
-----BEGIN CERTIFICATE-----
MIIFzjCCA7agAwIBAgIDDR9oMA0GCSqGSIb3DQEBBQUAMHkxEDAOBgNVBAoTB1Jv
b3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEiMCAGA1UEAxMZ
dEBjYWNlcnQub3JnMB4XDTEzMDQxODA3NDEzNFoXDTE1MDQxODA3NDEzNFowcDEY
MBYGA1UEAxMPV29qY2llY2ggS2FwY2lhMSkwJwYJKoZIhvcNAQkBFhp3b2pjaWVj
[snip]
N1lNLq5jrGhqMzA2ge57cW2eDgCL941kMmIPDUyx+pKAYj1I7IibN3wcP1orOys3
amWMrFRa30LBu6jPYy2TeeoQetKnabefMNE3Jv81gn41mPOs3ToPXEUmYU18VZ75
Efd/qu4SV/3SMdySSNmPAVQdXYAxBEXoN5b5FpUW7KeZnjoX4fkEUPeBnNwcptTC
d1w=
-----END CERTIFICATE-----
    
por MountainX 05.03.2014 / 16:08

2 respostas

6

Você pode fazer

openssl smime -encrypt -text -in <file> smime.p7s

em que <file> é o arquivo que você deseja criptografar. Se o arquivo smime.p7s estiver no formato DER em vez de PEM, você terá que convertê-lo com:

openssl pkcs7 -inform DER -outform PEM -in smime.p7s -out smime.pem

Você obtém um arquivo que pode enviar ao seu administrador de sistema. Se você for corajoso o suficiente, você pode remover -text e jogar com a opção -to , -subject , etc. para obter um arquivo de e-mail válido que você pode enviar diretamente para um servidor SMTP.

Se o certificado raiz do certificado usado para criptografar não for reconhecido pelo sistema operacional, mas VOCÊ confiar nele, você poderá adicioná-lo à base do certificado.

cp smime.pem /usr/local/share/ca-certificates/certificate.crt
sudo update-ca-certificates

O certificado deve ter a extensão .crt . Detalhes aqui .

    
por 05.03.2014 / 16:38
0

Sim, a extração do certificado FROM pkcs7 with -print_certs está correta, e se você quiser confiar na raiz do destinatário, use o de cacert.org, não o certificado do pkcs7.

Algumas explicações / notas:

As linhas extras antes do bloco cert não são problema. openssl permite texto 'comentário' em arquivos PEM antes da linha '----- BEGIN' (e depois de '----- END') embora isso não seja padrão e outros programas geralmente não.

A mensagem de erro sobre 'CERTIFICADO CONFIÁVEL' é um pouco enganosa. openssl na verdade permite duas variantes em um arquivo PEM de certificado: '[X.509] CERTIFICADO' e 'CERTIFICADO CONFIÁVEL'. O primeiro é padrão, o último é usado apenas dentro do openssl e apenas raramente. openssl procura por eles nessa ordem, então se ele não encontrar a mensagem de erro TRUSTED não encontrado. Esse formato permite determinados atributos de confiança no arquivo cert e é diferente da presença do certificado no diretório (ou arquivo) de armazenamento de confiança do openssl.

openssl sime -encrypt NÃO verifica se o certificado do destinatário é valido em relação ao armazenamento confiável, embora talvez devesse. Se houver alguma possibilidade, o p7s / cert que você recebeu foi adulterado ou forjado, você deve manualmente openssl verify o certificado antes de usá-lo, porque se esse certificado realmente tem a chave de um bandido em vez do cara bom, seus dados podem ser decifrados pelo bandido.

    
por 05.03.2014 / 21:08