Security net/smtp是否以纯文本形式发送凭据?

Security net/smtp是否以纯文本形式发送凭据?,security,email,go,smtp,Security,Email,Go,Smtp,我正在看这个例子 smtp.PlainAuth是否以纯文本形式向邮件服务器发送凭据?在野外使用net/smtp安全吗?PlainAuth使用RFC 4616中的普通身份验证机制,即明文形式的用户名/密码。通常,当您使用它时,加密将在较低级别上处理,例如,您将创建一个TLS连接。然后在上面使用明文。如果您不是通过加密连接进行交谈,那么使用PlainAuth可能会有风险,因为如果流量被拦截,那么用户/通行证很容易获得 但是如果您阅读,您将看到SendMail函数说明如下: SendMail在addr

我正在看这个例子


smtp.PlainAuth
是否以纯文本形式向邮件服务器发送凭据?在野外使用net/smtp安全吗?

PlainAuth使用RFC 4616中的普通身份验证机制,即明文形式的用户名/密码。通常,当您使用它时,加密将在较低级别上处理,例如,您将创建一个TLS连接。然后在上面使用明文。如果您不是通过加密连接进行交谈,那么使用PlainAuth可能会有风险,因为如果流量被拦截,那么用户/通行证很容易获得

但是如果您阅读,您将看到
SendMail
函数说明如下:

SendMail在addr连接到服务器,如果可能,切换到TLS,如果可能,使用可选机制a进行身份验证,然后使用消息msg从地址发送电子邮件至地址


因此,它将尝试在可能的情况下自动升级到TLS。因此,只要您使用支持TLS的服务器,您就应该相对安全。另一种身份验证选择是CRAMD5,但是这种方法的服务器支持通常不如大多数东西都支持的PlainAuth常见。

我如何知道我的服务器是否支持TLS?我需要安装其他程序吗?我是否需要TLS证书?您是在运行自己的服务器还是在使用其他服务器?如果你拥有?您是否在MTA上配置了TLS/SSL?您需要配置一个SSL证书(它可以是自签名的,但您可能会在某些程序中遇到问题--不确定go,但假设它链接到openssl,那么您可能会在自签名方面遇到问题),我正在DigitalOcean上运行自己的服务器。然后,您需要将tls作为服务器/水滴的一部分进行配置/启用。如果代码运行在同一个服务器上,您可能不需要auth/tls。在这种情况下,您的攻击面是最小的。配置TLS“作为服务器的一部分”是否类似于为web服务器设置TLS证书?或者这是一个完全不同的过程?
package main

import (
    "log"
    "net/smtp"
)

func main() {
    // Set up authentication information.
    auth := smtp.PlainAuth("", "user@example.com", "password", "mail.example.com")

    to := []string{"recipient@example.net"}
    mesg := []byte("This is the email body.")

    err := smtp.SendMail("mail.example.com:25", auth, "sender@example.org", to, mesg)
    if err != nil {
        log.Fatal(err)
    }
}