2017-05-30 68 views
0

我正在制作一个应用程序(微型PHP网站),将我的AirBnB客人信息发送给警察(我必须这么做 - 这是他们在做什么一家酒店,当他们在办理登机手续时拿着护照)。编写一个shell脚本通过Mutt发送S/MIME签名电子邮件

该应用需要生成一个包含访客数据的文件,然后通过数字签名的电子邮件将其发送给捷克警察局。第一部分已经完成,但是我还有一天又被Mutt困住了。

我的目标是在没有任何用户交互的情况下发送带有附件的带有附件的S/MIME签名电子邮件。因此,像这样:

mutt -s 'My mail ' [email protected] -a report1.txt < report2.txt 

上面的代码发送电子邮件带有附件但没有数字签名,虽然在默认情况下启用的muttrc。

我已经设法发送带有mutt的签名电子邮件,但只能通过它的交互式shell加上我每次都需要手动输入我的私钥的密码,上面的代码并不要求输入密码一个签名马上。

我试着用空PEM传递生成密钥,但之后OpenSSL根本不喜欢它,立即中止。

+0

什么是你试图让无密码钥匙的命令? – Deathgrip

+0

非常感谢!不记得,但它是错误的,我刚刚生成它正确,它使用空密码(在交互式shell中),但它仍然不会签名时,我发送电子邮件与命令。有任何想法吗? –

+0

下面是我在我的muttrc: '设置smime_certificates =〜/ .smime /证书 集smime_keys =〜/ .smime /键 源〜/ .mutt的/ smime.rc 集smime_default_key = af7d0df7.0 集crypt_autosign =是 设置smime_is_default =是' –

回答

0

我会使用sendmail命令而不是mutt。

openssl smime -sign -in report.txt -text -signer cert.pem \ 
-from [email protected] -to [email protected] \ 
-subject "My mail" | sendmail [email protected] 

在这个例子中,cert.pem从PKCS12文件中创建:

openssl pkcs12 -in yourcert.p12 -out cert.pem -clcerts -nodes 

REPORT.TXT要签署并发送纯文本文件/报告。

OpenSSL smime(1)手册页有几个很好的例子。

+0

我也试过这个,事情是我需要包括一个附件(小文本文件),我找不到用sendmail做到这一点的方法:/ –

0

绝望的人做绝望的事情。我编辑了OpenSSL的源代码来生成Content-Type: text/plain;\r\n而不是Content-Type: text/plain\r\n\r\n这样我就可以与跟进:

Content-Disposition: attachment; 
     filename="test.txt"