背景
既然有騰訊企業郵箱了,為什么不充分利用呢?!
遂在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 .