【问题标题】:I think I'm missing something: Can't get Rails + Postfix / Sendmail with TLS to work [closed]我想我错过了一些东西:无法让 Rails + Postfix / Sendmail 与 TLS 一起工作 [关闭]
【发布时间】:2019-01-13 23:40:06
【问题描述】:

我正在尝试为 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 等第三方邮件服务器不感兴趣)。

【问题讨论】:

    标签: ssl sendmail tls1.2 postfix-mta


    【解决方案1】:

    在您的 rails 配置中,您必须将其指向真实地址。 Rails 正在读取证书,查看证书中的任何 tld 并将其与您提供的地址进行比较。

    例如,如果您购买了证书,并说它是mail.mydomain.com,那么当 rails 连接到 postfix 服务器时,它会检查证书。在您的 Rails 配置中,localhost 的地址与mail.mydomain.com 的证书签名不匹配,因此失败。有3个选项

    • 更改您的 rails Smtp 配置以转到证书中的 FQDN (mail.mydomain.com)
    • 让 Rails 忽略这样的证书问题,只是盲目地接受证书
    • 绕过 TLS 并仅进行不安全的连接,因此证书显示为 FQDN 无关紧要

    从长远来看,如果 postfix 服务器受到威胁,选项 2 的风险更大,但它很常用。

    您的主要目的是确保消息传输是加密的。 rails 可以使用本地系统来传递邮件并将邮件丢弃在 linux 消息总线中吗?在那个时候它永远不会使用网络,而 postfix 将处理超过那个点的加密。

    【讨论】:

    • 谢谢! 1)你如何让rails忽略这样的证书问题? 2) 有没有办法使用 :sendmail 和 TLS 加密而不是 :smtp?
    • 1:我不知道rails 是如何工作的,所以你可能需要用rails 标签提出不同的问题。 2:这就是为什么我问关于发送邮件的原因,你可以使用本地系统消息而不是smtp来传递邮件,它最终会通过postfix离开你的系统,但如果你从不接触网络,那么你不需要加密。
    • 这可能是我所缺少的。我可以使用本地系统(本地安装的postfix)发送,这是我的偏好。 TLS 是否仅参与身份验证过程(对于 SMTP)?那么如何在传输过程中加密邮件(摆脱 Gmail 中的红色解锁锁)?
    • 一路上的所有服务器都必须使用 tls 加密或更好。你的邮件路径是什么?你的应用连接到 postfix,然后 postfix 服务器连接到哪里?
    • /usr/bin/mail、/usr/sbin/sendmail、/usr/sbin/postfix。这是你要求的吗?在后缀之后我没有定义任何东西。我假设后缀直接发送到 gmail。如果他们每一步都使用 TLS(我假设),那么需要做什么才能摆脱 Google 中的“不安全”图标?我将尝试使用上面的选项 1 使用 SMTP 连接到我自己的服务器。
    猜你喜欢
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 2010-10-17
    相关资源
    最近更新 更多