我使用signing-milter来签名Postfix外发电子邮件。我创建了一个自签名证书,并使用它对电子邮件进行签名。
通过遵循this guide创建了自签名证书。我在生成密钥时删除了“ -des3
”,因此,不需要密码短语,并且可以将命令放在脚本中。并运行它。
milter和postfix运行正常,但出现以下错误。
Jul 15 17:27:38 ip-172-31-13-49 signing-milter[20304]: load_pem_cert: PEM_read_bio_X509() failed, file=/etc/postfix/SslKeys/smime.com.au.cert+key.pem
Jul 15 17:27:38 ip-172-31-13-49 signing-milter[20304]: error: ctxdata_setup: loading certificate /etc/postfix/sslKeys/smime.com.au.cert+key.pem failed
Jul 15 17:27:38 ip-172-31-13-49 signing-milter[20304]: callback_envfrom: ctxdata_setup() failed: rc=3, envsender='<email_marketing@com.au>', file=/etc/postfix/sslKeys/smime.cert+key.pem
Jul 15 17:27:38 ip-172-31-13-49 postfix/submission/smtpd[20420]: NOQUEUE: milter-reject: MAIL from unknown[xxx.xxx.xxx.xxx]: 451 4.7.1 Service unavailable - try again later; from=<email_marketing@com.au> proto=ESMTP helo=<Mail>
Signing-milter的源代码如下。
X509* load_pem_cert(const char* file) {
BIO* bio = NULL;
X509* cert = NULL;
if ((bio=BIO_new(BIO_s_file())) == NULL) {
logmsg(LOG_ERR, "load_pem_cert: BIO_new() failed");
goto end;
}
if (BIO_read_filename(bio,file) <= 0) {
logmsg(LOG_ERR, "load_pem_cert: BIO_read_filename(%s) failed", file);
goto end;
}
if ((cert=PEM_read_bio_X509(bio, NULL, NULL, NULL)) == NULL) {
logmsg(LOG_ERR, "load_pem_cert: PEM_read_bio_X509() failed, file=%s", file);
goto end;
}
end:
if (bio != NULL)
BIO_free(bio);
return (cert);
}
因为我无法更改源代码,所以只能更改创建证书的方式。
我运行了以下命令来验证证书,并且没有给出错误。
sudo openssl x509 -in /etc/postfix/sslKeys/smime.com.au.cert+key.pem -inform PEM -text -noout
我不知道是什么原因引起的。请帮帮我。提前非常感谢您。