如何使用某人的 SSL smime.p7s 文件加密消息

Mou*_*inX 4 encryption cryptography openssl

我需要安全地将私钥文件发送给某人(受信任的系统管理员)。我提出了几个选项,但他回答如下:

嗨,我既没有 LastPass 也没有 GnuPGP,但我使用的是 ssl 证书 - 此消息是用此类签名的,因此您将能够向我发送消息并使用我的公钥对其进行加密。

我使用 openssl 来获取他的证书:

openssl pkcs7 -in smime.p7s -inform DER -print_certs
Run Code Online (Sandbox Code Playgroud)

该证书由以下机构颁发:

issuer=/O=Root CA/OU=http://www.cacert.org/CN=CA Cert Signing Authority/emailAddress=support@cacert.org
Run Code Online (Sandbox Code Playgroud)

(Firefox 没有来自 cacert.org 的根证书。)

现在,我如何加密要发送给他的密钥文件?我更喜欢使用 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
Run Code Online (Sandbox Code Playgroud)

$ openssl pkcs7 -in smime.p7s -inform DER -print_certs
subject=/CN=Wojciech Kapcia/emailAddress=someone@example.com/emailAddress=someone@example.com
issuer=/O=Root CA/OU=http://www.cacert.org/CN=CA Cert Signing Authority/emailAddress=support@cacert.org
-----BEGIN CERTIFICATE-----
MIIFzjCCA7agAwIBAgIDDR9oMA0GCSqGSIb3DQEBBQUAMHkxEDAOBgNVBAoTB1Jv
b3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEiMCAGA1UEAxMZ
dEBjYWNlcnQub3JnMB4XDTEzMDQxODA3NDEzNFoXDTE1MDQxODA3NDEzNFowcDEY
MBYGA1UEAxMPV29qY2llY2ggS2FwY2lhMSkwJwYJKoZIhvcNAQkBFhp3b2pjaWVj
[snip]
N1lNLq5jrGhqMzA2ge57cW2eDgCL941kMmIPDUyx+pKAYj1I7IibN3wcP1orOys3
amWMrFRa30LBu6jPYy2TeeoQetKnabefMNE3Jv81gn41mPOs3ToPXEUmYU18VZ75
Efd/qu4SV/3SMdySSNmPAVQdXYAxBEXoN5b5FpUW7KeZnjoX4fkEUPeBnNwcptTC
d1w=
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)

lge*_*get 6

你可以做

openssl smime -encrypt -text -in <file> smime.p7s
Run Code Online (Sandbox Code Playgroud)

<file>您要加密的文件在哪里。如果文件smime.p7s是 DER 格式而不是 PEM,则必须将其转换为:

openssl pkcs7 -inform DER -outform PEM -in smime.p7s -out smime.pem
Run Code Online (Sandbox Code Playgroud)

您将获得一个可以发送给系统管理员的文件。如果你够勇敢,你可以删除-text和播放的选项-to-subject等等,让你可以直接发送到SMTP服务器的有效电子邮件文件。

如果您用于加密的证书的根证书不被您的操作系统识别但您信任它,您可以将其添加到证书库中。

cp smime.pem /usr/local/share/ca-certificates/certificate.crt
sudo update-ca-certificates
Run Code Online (Sandbox Code Playgroud)

证书必须有.crt扩展名。详情请看这里