Closed. This question is
off-topic。它当前不接受答案。
想改善这个问题吗?
Update the question,所以它是
on-topic,用于堆栈溢出。
2年前关闭。
我正在尝试为Ruby on Rails应用程序设置一个简单的电子邮件发件人。我已经安装了Postfix并在DNS服务器上添加了SFP记录,因此电子邮件确实可以通过垃圾邮件过滤器,但是我也想对邮件使用TLS加密,并且没有找到有效的设置。
这是我尝试过的一些方法:
我们已从GoDaddy购买了证书。当我告诉postfix通过以下方式使用该证书时:
后缀配置
# /usr/share/postfix/main.cf
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/my-cert.pem
smtpd_tls_key_file=/etc/ssl/private/my-cert.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/
Rails的配置
# /config/environments/my_env.rb
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'localhost',
authentication: 'plain',
domain: 'my_domain.com',
enable_starttls_auto: true
}
错误响应为
hostname "localhost" does not match the server certificate
如果将rails config中的地址更改为服务器的域,则会抛出
454 4.7.1 <test_recipient@gmail.com>: Relay access denied
。
问题是,我不明白为什么这里需要SMTP。我正在从本地服务器发送邮件,因此不需要SMTP /身份验证。我的直觉是我可以告诉Rails直接使用:sendmail,但是我还没有找到让sendmail使用TLS的方法。
我感觉好像丢失了一些东西,我只希望消息在从发送者到接收者的途中经过加密。 (即避免使用Gmail
red unlocked lock)我是否需要其他我不知道的工具? (对第三方邮件服务器(例如Mandrill等)不感兴趣)。
在rails配置中,您必须将其指向实际地址。 Rails正在读取证书,查看证书中包含的所有内容并将其与您提供的地址进行比较。
例如,如果您购买了证书,并说它是mail.mydomain.com
,则当rails连接到后缀服务器时,它将检查证书。在您的rails配置中,localhost
的地址与mail.mydomain.com
的证书签名不匹配,因此失败。有3个选择
更改rails Smtp配置以转到证书中的FQDN(mail.mydomain.com)
让rails忽略这样的证书问题,只是盲目接受证书
绕过TLS并仅进行不安全的连接,因此证书作为FQDN呈现的内容无关紧要
从长远来看,如果后缀服务器受到威胁,则选项2更具风险,但是它是常用的。
您的主要目的是确保邮件传输已加密。 Rails可以使用本地系统传递邮件并将邮件放入linux消息总线吗?那时它永远不会使用网络,而后缀将处理该点之后的加密。