
前言
跟着 WordPress 插件新手教程写了第一个插件,功能很简单,也很小众,用于给 WordPress 外发邮件添加 S/MIME 签名,在支持的邮箱应用中就会显示已签名的图标。本文会对插件进行简单的介绍,并讲解如何使用。
S/MIME 可用于电子邮件加解密、签名等,本插件专注于签名功能。电子邮件签名可以让收件人知道该电子邮件确实来自于你,并且中途未经篡改,在诸如更改密码验证等邮件中很实用。
GitHub 页面:https://github.com/liups233/wordpress-smime-email-signing
WordPress 插件页面:https://wordpress.org/plugins/smime-email-signing/
目录
前提条件
- 本插件仅在单用户 WordPress 网站进行了测试,例如个人博客。在多用户网站上,可能无法正常运行,未来也不一定会尝试兼容多用户网站,主要我个人没有需要。
- 仅在 PHP 8.3 及以上版本进行了测试。确保您的 PHP 环境已安装
openssl扩展(通常默认安装)。 - 我只测试过使用插件(如 FluentSMTP)经过外部 SMTP 服务器发送邮件。
使用教程
获取证书
您可以在各大 CA 的网站申请 S/MIME 证书,我推荐用 Actalis 的免费一年证书用于测试(但不是很安全)。在 Actalis 申请后,您可以下载包含公钥、私钥和证书链的 p12 证书文件。p12 文件的密码将发送至您的邮箱。

拆分 p12 证书
假设 p12 文件名为 “smime.p12”,请执行以下命令将其分割为独立的密钥。如果你是通过 CSR 方法申请的证书,私钥、公钥、证书链应该本来就是分开的,不需要拆分。
- 导出私钥:
openssl pkcs12 -in smime.p12 -nocerts -out smime.key- 系统会提示输入导入密码,即 p12 文件的密码。
- 随后,您需要输入一个密码来保护导出的私钥。此密码即为插件设置中需要填写的密码。
- 输入两次以确认。
- 导出公钥:
openssl pkcs12 -in smime.p12 -clcerts -nokeys -out smime.crt- 系统将提示输入导入密码,即 p12 文件的密码。
- 导出证书链:
openssl pkcs12 -in smime.p12 -cacerts -nokeys -out certchain.pem- 系统将提示输入导入密码,即 p12 文件的密码。
密钥文件开头的 Bag Attributes、subject、issuer 等字段可以保留,不影响。
设置权限
上传密钥文件到服务器后(不要上传到网站根目录下),需要为每个文件设置权限。
- 私钥:
chmod 640 smime.key - 公钥:
chmod 644 smime.crt - 证书链:
chmod 644 certchain.pem
插件设置
安装并激活插件后,设置页面将出现在左侧,并带有盾牌图标。您需要填写路径和密码字段,点击保存,即可完成设置。
您可以使用 SMTP 插件中的「发送测试邮件」功能进行测试。
卸载插件后,设置的路径和密码将自动删除。
屏幕截图



常见问题
Q:插件的原理?
A:使用 PHPMailer 自带的 sign() 方法,在邮件发送前自动签名,示例见此。
Q:这样储存明文密码,安全吗?
A:明文密码保存在数据库中,加密的私钥保存在文件系统里,只要两者不被同时入侵应该没问题。我觉得不够安全,但我没有想到更好的办法,欢迎提出建议。
更多其它内容可以回到〈博客主页〉看。





















