linux下通过mailx发送qq企业邮件:Error in certificate: Peer's certificate issuer is not recognized.
背景
既然有腾讯企业邮箱了,为什么不充分利用呢?!
遂在centos7下,通过mailx来配置mail.rc,并向外网发送邮件。
基本过程
centos下安装mailx,过程略
配置/etc/mail.rc,其定制内容如下:
set from=user@enterprise.domain #set smtp-use-starttls set smtp=smtps://smtp.exmail.qq.com:465 set smtp-auth=login set smtp-auth-user=user@enterprise.domain set smtp-auth-password=password #set ssl-verify=ignore set nss-config-dir=/etc/pki/nssdb
难点:关键点:配置“nss-config-dir”:这是个存放用户自定义的证书库的【目录】,其中包含多个证书库文件,可供mailx命令底层ssl(tls)库去访问证书信息以便进行通讯和认证等。第 1:该配置必须存在,第 2:该目录必须存在且可访问, 第 3:该目录内必须含有证书库文件——哪怕其中没有证书配置信息,第 4:为了正常和腾讯企业邮箱正常通讯,我们必须添加腾讯企业邮箱的上级CA证书为信任,注意,不是腾讯企业邮箱自己的证书——这是网上绝大部分教程案例错误的根本原因。
怎么获取腾讯企业邮箱的上级CA证书呢?简单,可用通过浏览器web方式登录腾讯企业邮箱,然后再浏览器相关设置或功能内下载或导出该证书。使用firefox非常简单,如下图所示。将该证书下载下来(提示:可以使用 任何计算机或你喜欢的设备与方式 将该文件下载),传到mailx的服务器的指定nss-config-dir目录下。之后进入该nss-config-dir目录下,通过certutils工具添加该CA证书为信任即可!
最后,即可通过mailx命令发送邮件,示例如下:
echo "This is a test mail body!" | mailx -s "test-ok" destcontact@dest.domain
如果nss-config-dir的配置不合适,mailx会发出一个警告“Error in certificate: Peer's certificate issuer is not recognized.” ! 首先,肯定是推荐通过正确配置解决。其次,如果不行或嫌麻烦,则可以偷懒,屏蔽掉这个警告,mailx的调用如下:
echo "test11"|mailx -s "test" jinzhenshui@cnce.cn 2>/dev/null echo "test11"|mailx -s "test" jinzhenshui@cnce.cn 2>/dev/null echo "test11"|mailx -s "test" jinzhenshui@cnce.cn 2>/dev/null
附注一:firefox浏览器获取exmail.qq.com的上级CA证书 “DigiCert Secure Site CN CA G3”
附注二:chrome、edge浏览器获取exmail.qq.com的上级CA证书 “DigiCert Secure Site CN CA G3”
附注三:firefox获取的证书链(pem),其内部是base64编码的证书文本,从文件的上到下,依次上最终用户证书、然后是上级CA机构证书、...直到文件最后是CA根root证书。换言之,我们只要下载这个证书链文件,就可根据需要,手工提取出各级证书。另外,firefox的证书链,可以再各个级别的tab下执行,下载的都是本网页开始的全部链证书(作为对比,chrome、edge是通过windows的证书管理器,只能复制或说导出本级及其上的证书链)。
附注四:对于可能包含证书链的p7p格式的文件,我们可以直接通过windows的证书管理器certmgr去进行查看、导出相关的证书。
附注五:数字证书常见标准和格式
转1: 数字证书常见格式整理 - 崔咩咩 - 博客园 (cnblogs.com)
转2:常见的数字证书格式 - FrankYou - 博客园 (cnblogs.com)
转3:
转4:
附注六:certutils工具基本使用
# add ca of top level certutil -A -n "anynameCA1" -t "C,C,C" -d ./ -i c1.crt # add crt of tencent exmail certutil -A -n "exmail" -t "P,P,P" -d ./ -i exmail-qq-com.pem # delete cert db #rm -rf *.db # delete a cert certutil -D -n p1 -d . # list certs certutil -L -d .
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2020-08-18 Tiny-Core-Linux 9.x:安装oracle【11g|】:艰难的旅程,不过,最终成功了!