openssl smime 加密邮件 和发送邮件-程序员宅基地

技术标签: macos  

概述

非对称加密, 通常是RSA加密, 由公开密匙和私人密匙两部分组成, 公开密匙可用于分发给公众,或者是所有需要参与验证签名,或发送加邮件的人员. 邮件可以通过签名,来证明这邮件的确是由签名者发出, 签名需要用私人密匙, 接收者通过用公开密匙来验证邮件是否有发件人的签名.但邮件内容不会加密. 加密邮件需要用收信人的公开密匙来加密邮件, 加了密的邮件只能用对应的私人密钥解密, 其它有收件人公开密钥的人员并不能用公开密钥来解密邮件,从而实现加密的目的. 

用到的软件

系统: Raspberry PI

加密: openssl

邮件发送: msmtp

MacOS

james@testpi:~/smime $ uname -a
Linux testpi 6.1.21-v8+ #1642 SMP PREEMPT Mon Apr  3 17:24:16 BST 2023 aarch64 GNU/Linux
james@testpi:~/smime $ openssl version
OpenSSL 1.1.1w  11 Sep 2023
james@testpi:~/smime $ msmtp --version
msmtp version 1.8.11
Platform: aarch64-unknown-linux-gnu
TLS/SSL library: GnuTLS
Authentication library: GNU SASL; oauthbearer: built-in
Supported authentication methods:
plain scram-sha-1 external gssapi cram-md5 digest-md5 login ntlm oauthbearer
IDN support: enabled
NLS: enabled, LOCALEDIR is /usr/share/locale
Keyring support: Gnome
System configuration file name: /etc/msmtprc
User configuration file name: /home/james/.config/msmtp/config

Copyright (C) 2020 Martin Lambers and others.
This is free software.  You may redistribute copies of it under the terms of
the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.
There is NO WARRANTY, to the extent permitted by law.
james@testpi:~/smime $

Debian相关基本概念

Debian/linux是用于邮件加密的软件是openssl. 可以用它完成: 1)生成自己的密钥对. 2) 对密钥对进行加密. 3) 对密钥的文件格式进行转换. 4)对邮件进行签名加密. 5)对邮件进行验证与解密 

Debian 生成密码

james@testpi:~/test02 $ openssl genrsa -out leohzhuicloud.pem 4096

james@testpi:~/test $ head leohzhuicloud-key.pem
-----BEGIN RSA PRIVATE KEY-----
MIIJJwIBAAKCAgEA0kiGmTSQA0AneKEKeg9Z7WXSL9wApMHZbZzOcMCk7fDx6DsV
+GdvS46TaW/7UPAFxz4YrYYbfTA+AuBEF+SIfGa2INi26CaKrre+PhixTzXosCqz
Rg1M7HdOfZKlIiXxq7BiXHPkQnoGWDsjJ3c2PbiRuIG5ybAO4qFALeJJQBURFldq
jr3HAz0YFr9x9NOyuCp9eUkDMLJgW/nfGu5K+PT2BzxYDrK3jjX7h5PtdMunqRv/
+YUjX7kv7D4FfCj+lEFKcW8SabP9I1z6+N6zlkXU+VwABVt4A0ikgA8SgvzYHqD8

Debian 生成CSR

james@testpi:~/test02 $ openssl req -new -key leohzhuicloud-key.pem -subj "/CN=leohzhuicloud" -out leohzhuicloud-csr.pem

james@testpi:~/test $ head leohzhuicloud-csr.pem
-----BEGIN CERTIFICATE REQUEST-----
MIIEXTCCAkUCAQAwGDEWMBQGA1UEAwwNbGVvaHpodWljbG91ZDCCAiIwDQYJKoZI
hvcNAQEBBQADggIPADCCAgoCggIBANJIhpk0kANAJ3ihCnoPWe1l0i/cAKTB2W2c
znDApO3w8eg7Ffhnb0uOk2lv+1DwBcc+GK2GG30wPgLgRBfkiHxmtiDYtugmiq63
vj4YsU816LAqs0YNTOx3Tn2SpSIl8auwYlxz5EJ6Blg7Iyd3Nj24kbiBucmwDuKh

 Debian从来自Mac的PEM证书分离证书与私匙

导出证书

james@testpi:~/test $ openssl pkcs12 -in leohzhuicloud.p12 -out leohzhuicloudcert.pem -clcerts -nokeys
Enter Import Password:
james@testpi:~/test $ head leohzhuicloudcert.pem
Bag Attributes
    friendlyName: leohzhuicloud
    localKeyID: 23 01 3E 3F 54 0D AC 83 F2 3D F3 A7 A6 46 5A A9 9F 52 C5 C1
subject=CN = leohzhuicloud, C = CN, emailAddress = [email protected]

issuer=CN = james\E7\9A\84CA, C = CN, emailAddress = [email protected]

-----BEGIN CERTIFICATE-----
MIIEmzCCAoOgAwIBAgIEU2jZgTANBgkqhkiG9w0BAQsFADBGMRMwEQYDVQQDDApq
YW1lc+eahENBMQswCQYDVQQGEwJDTjEiMCAGCSqGSIb3DQEJARYTamFtZXMuaC56

私匙

james@testpi:~/test $ openssl pkcs12 -in leohzhuicloud.p12 -out leohzhuicloud-key-01.pem  -nocerts
Enter Import Password:
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
james@testpi:~/test $ head leohzhuicloud-key-01.pem
Bag Attributes
    friendlyName: leohzhuicloud
    localKeyID: 23 01 3E 3F 54 0D AC 83 F2 3D F3 A7 A6 46 5A A9 9F 52 C5 C1
Key Attributes: <No Attributes>
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIFRHruntZf/gCAggA
MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECABB0a78wFD7BIIEyNPEL6qTJLB+

去除证书或私匙中的密码

james@testpi:~/test $ openssl rsa -in leohzhuicloud-key-01.pem -out leohzhuicloud-key-01-.pem
Enter pass phrase for leohzhuicloud-key-01.pem:
writing RSA key
james@testpi:~/test $ head leohzhuicloud-key-01-.pem
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEA3/p/ihnUCL4G5rNOfYwb93LOAsNLGPgSN/tKI7AbCjb/yEHT
uiwDKyWJcTiQ0VvZ+4YUVSSemwVsuGUNnMb27SvnJHNYZKTzWEFwQjR0ly8ZQNdJ

Debian生成加密邮件

james@testpi:~/test $ openssl smime -encrypt -in message.txt -out message.txt.encrypt -text -from [email protected] -to [email protected] -des3 leohzhuicloudcert.pem
james@testpi:~/test $ head message.txt.encrypt
To: [email protected]
From: [email protected]
MIME-Version: 1.0
Content-Disposition: attachment; filename="smime.p7m"
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name="smime.p7m"
Content-Transfer-Encoding: base64

MIIBwQYJKoZIhvcNAQcDoIIBsjCCAa4CAQAxggFqMIIBZgIBADBOMEYxEzARBgNV
BAMMCmphbWVz55qEQ0ExCzAJBgNVBAYTAkNOMSIwIAYJKoZIhvcNAQkBFhNqYW1l

Debian 生成签名邮件

james@testpi:~/test03 $ openssl smime -sign -in ../test/message.txt -out message.txt.sig -signer 13763380496crt.pem -inkey 13763380496.pem -nocerts -nodetach -text -from [email protected] -to [email protected] -subject "test gpg 03"
james@testpi:~/test03 $ head message.txt.sig
To: [email protected]
From: [email protected]
Subject: test gpg 03
MIME-Version: 1.0
Content-Disposition: attachment; filename="smime.p7m"
Content-Type: application/x-pkcs7-mime; smime-type=signed-data; name="smime.p7m"
Content-Transfer-Encoding: base64

MIICzAYJKoZIhvcNAQcCoIICvTCCArkCAQExDzANBglghkgBZQMEAgEFADBCBgkq
hkiG9w0BBwGgNQQzQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluDQoNCmhlbGxvIHdv

 Debian 解密邮件

james@testpi:~/test $ openssl smime -decrypt -in message.txt.encrypt -recip leohzhuicloudcert.pem -inkey leohzhuicloud-key-01-.pem
hello world!
test 01
james@testpi:~/test $

Debian 验证签名邮件

james@testpi:~/test03 $ openssl smime -verify -in message.txt.sig -certfile 13763380496crt.pem -CAfile jamescert.pem
Content-Type: text/plain

hello world!
test 01
Verification successful

Debian发送加密邮件

echo "subject:"hello world"" |msmtp -a 163 [email protected]

 将Mac导出证书的证书转换为PEM证书

james@testpi:~/test03 $ head jamescert.cer
0�a0�I�0*�H��
0F10U

james的CA1
[email protected]�
james@testpi:~/test03 $ openssl x509 -in jamescert.cer -inform der -out jamescert.pem
james@testpi:~/test03 $ head jamescert.pem
-----BEGIN CERTIFICATE-----
MIIFYTCCA0mgAwIBAgIBATANBgkqhkiG9w0BAQsFADBGMRMwEQYDVQQDDApqYW1l
c+eahENBMQswCQYDVQQGEwJDTjEiMCAGCSqGSIb3DQEJARYTamFtZXMuaC56aHVA

 Debian生成可在Mac导入的含秘匙证书

james@testpi:~/test03 $ openssl pkcs12 -inkey 13763380496key.pem -in 13763380496crt.pem -export -out 13763380496key.pfx

james@testpi:~/test03 $ head 13763380496key.pfx
0�
a0�
��	*�H��
�
0�
0��0��0���H��   *�H��
*�H��

Debian 生成可在iphone/Mac导入的公开密钥证书

在Debian发个含签名的邮件, 附上证书, 收件人即可将公开密钥保存.

Mac相关基本概念

Mac用钥匙串访问来管理密钥, iphone在/设置/通用/VPN与设备管理/配置描术文件中管理. 首先需要用证书,可以是来自Debian/Linux发过来的,也可以是直接在Mac上用钥匙串访问生成证书. 有了密钥后,才会在写邮件时, 发件人信箱与密钥相同时,才会有签名项的提示. 有收件人的公开密钥, 才会在写邮件时, 出现加密的提示. 当首次收到含签名的邮件时, 会提示, 需要点击发件人,将证书保存,然后才能发送加密邮件给对方 

Mac 设置证书签发机构

设置证书签发机构的目的是为了对自己生成的证书进行签名, 这样自己生成的证书才能被认为是可信任的.

Mac生成CSR证书

​​​​​​​

Mac作为证书签发机构签发证书

用到的信息: CSR

特注:  如果是选择“让我覆盖此请求的默认值”, 则有可能会重新生成密匙. 有过经历在Debian生成4096位的秘匙, 形成CSR后,在Mac签发的证书密码已被改成2048位, 导致签名后的证书所含的密钥并不是在Debian中生成的密钥,注意注意!


Mac导入证书

Mac查收加密邮件

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jameshzhu/article/details/137377056

智能推荐

spark常见RDD练习_spark rdd有哪些经典练习案例-程序员宅基地

文章浏览阅读2.1k次。Spark 常用RDD练习其实还是推荐这个网站,写的很棒,点我一、Transformation1 map Applies a transformation function on each item of the RDD and returns the result as a new RDD. (返回一个新的RDD,该RDD有每一个输入元素经过func函数转换后组成)def map[..._spark rdd有哪些经典练习案例

(python)正则表达式提取字符串中的各种信息(持续更新)_正则表达式 获取所有内容(1)-程序员宅基地

文章浏览阅读275次,点赞4次,收藏6次。前两位数字代表省级行政区,中间两位数字代表市级行政区,后两位数字代表县级行政区、县市辖区或直辖市的行政区划。手机号码有自己特定的特征,比如1开头,手机号码长度 11位,一般来说,中国的邮政编码由6位数字组成。省级行政区 市级行政区 县级行政区。不同运营商的号段分布。

方舟编译器最新技术细节,2024年最新简短的面试总结-程序员宅基地

文章浏览阅读217次,点赞5次,收藏3次。希望本文对你有所启发,有任何面试上的建议也欢迎留言分享给大家。好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划,来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。好了~如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。

李宏毅机器学习课程笔记——回归_李宏毅机器学习中回归课堂笔记-程序员宅基地

文章浏览阅读259次。1、回归是什么回归(Regression) 就是找到一个函数 function,通过输入特征 x,输出一个数值 Scalar。比较像我们常见的函数拟合。2、回归的步骤step1:模型假设,选择模型框架step2:模型评估,如何判断众多模型的好坏(损失函数)step3:模型优化,如何筛选最优的模型(梯度下降)下面以李宏毅老师的课程中的宝可梦能力值的例子来对每个步骤进行分析。2.1 模型选择这里我们都选择线性模型进行分析。2.1.1 单个特征当选取单个特征时,以特征xcpx_{cp}x_李宏毅机器学习中回归课堂笔记

HOG算法及其改进 (附代码)_hog算法代码-程序员宅基地

文章浏览阅读1.2k次,点赞30次,收藏25次。HOG算法及其改进_hog算法代码

RAC 更改主机名及IP地址_crsctl pin css -n-程序员宅基地

文章浏览阅读1.9k次。由于安装RAC时脚本执行顺序错了,导致实例orcl1装到了rac2节点上,orcl2装到了rac1节点上,看起来很别扭,趁这个机会练习下更改主机名和IP地址。原IP及主机名设置:#public IP172.12.1.11 rac1.oracle.com rac1172.12.1.12 rac2.oracle.com rac2#private IP10.10.10.1 rac1_crsctl pin css -n

随便推点

VS中未定义标识符cout,endl_未定义标识符 "endl-程序员宅基地

文章浏览阅读1w次,点赞6次,收藏10次。VS中未定义标识符vs2017中显示未定义标识符cout,endl。一种方法是:先看有没有包含输入输出流#include,以及命名空间using namespace std;第二种:如果上面都已包含,还是显示未定义标识符的话,检查一下,#include"pch.h"是否是在#include上面我就是犯了第二个错误..._未定义标识符 "endl

python 实现AES-CMAC算法验证_aescmac算法验证-程序员宅基地

文章浏览阅读797次,点赞7次,收藏14次。如果你也是看准了Python,想自学Python,在这里为大家准备了丰厚的免费。_aescmac算法验证

VUE实现网页中滚动鼠标时导航背景颜色透明度的改变_vue可以监听鼠标滚轮滑动,导航条透明度变化-程序员宅基地

文章浏览阅读2.9k次,点赞11次,收藏28次。1、HTML<div id="topNav" :style="topNavBg"> 这里是导航内容</div>2、JSexport default { data () { return { topNavBg: { backgroundColor: '' } } }, mounted () { window.addEventListener('scroll', this.handleScroll) // 监听_vue可以监听鼠标滚轮滑动,导航条透明度变化

【数据结构】单链表-练习_设 l 为带头结点的单链表,编写算法实现从尾到头反向输出每个结点的值-程序员宅基地

文章浏览阅读191次。2. 每当访问一个结点时,先递归输出它后面的结点,再输出该结点自身,这样链表就反向输出了。2. 将上述单链表中的元素按从头到尾的顺序,使用头插法新建一个链表 reverse;【题目】设 L 为带头结点的单链表,编写算法实现从尾到头反向输出每个结点的值。3. 打印输出 reverse 中的元素。【思路】 1. 尾插法建立单链表 L;【答案】 1. 建立一个单链表;_设 l 为带头结点的单链表,编写算法实现从尾到头反向输出每个结点的值

(一) ansible (架构,安装,java代理模式面试题-程序员宅基地

文章浏览阅读982次,点赞15次,收藏12次。其它面试题(springboot、mybatis、并发、java中高级面试总结等)既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)

dB(分贝)定义及其应用(音量 dB dBA 计算 调整)-程序员宅基地

文章浏览阅读7.5k次,点赞7次,收藏18次。音量 分贝 dB dBA 计算 调整理解dB的第一个要点,就是要知道它是表示两个具有相同单位的同一种物理量的相对关系。即两种电或声功率之比,或两种电压或电流值或类似声量之比。它还是一种测量声音相对响度的单位。最初在电话工程领域,dB是用于定义于表示两个功率比,是P1/P0的比值再取以10为底的对数,再乘以10,其数学式为:dB是一个比值,是一个数值,是一个纯计数方法,没有任何单位标注。由于它在不同领域有着不同的名称,因此它也代表不同的实际意义。常见的领域有:声音、信号、增益等。_db