【问题标题】:Is it possible to achieve SSL connection when mail is received on port 2525端口接收邮件时是否可以实现SSL连接
【发布时间】:2014-12-14 01:32:20
【问题描述】:

我有一个在端口 25 和 465 上运行的 TIdSMTPServer,它的 OnConnect 事件如下所示:

procedure TMainForm.SMTPServerConnect(AContext: TIdContext);
begin
  if (AContext.Connection.IOHandler is TIdSSLIOHandlerSocketBase) then begin
    TIdSSLIOHandlerSocketBase(AContext.Connection.IOHandler).PassThrough := False;
end;

在激活SMTPServer之前执行这段代码:

with IdServerIOHandlerSSLOpenSSL1 do begin
  SSLOptions.CertFile := myCertFile;
  SSLOptions.RootCertFile := myRootCertFile;
  SSLOptions.KeyFile := myKeyFile;
end;
SMTPServer.IOHandler := IdServerIOHandlerSSLOpenSSL1;

当客户端尝试连接到端口 465(使用implicit SSL)时一切正常。但是,当另一个 smtp 服务器(例如 yahoogmail)发送邮件时,它会出现在端口 25 上,并且显然在我的 OnConnect 事件中被阻止。所以我问是否可以发出STARTTLS 之类的东西,并使用 SSL 以某种方式加密端口 25 上的连接,或者有没有办法告诉对方我想在端口 465 上使用 SSL 进行通信(使用我的证书在这两种情况下,连接始终是直接的 - 无需用户名/密码验证)?

【问题讨论】:

    标签: delphi email ssl smtp indy


    【解决方案1】:

    在 Indy 10 中,PassThrough 默认为 True。在将PassThrough设置为False之前,您需要查看客户端实际连接的端口号,例如:

    procedure TMainForm.SMTPServerConnect(AContext: TIdContext);
    begin
      if (AContext.Connection.IOHandler is TIdSSLIOHandlerSocketBase) then
      begin
        if AContext.Binding.Port = 465 then begin
          TIdSSLIOHandlerSocketBase(AContext.Connection.IOHandler).PassThrough := False;
        end;
      end;
    end;
    

    TIdHTTPServer 有一个 OnQuerySSLPort 事件为您处理此详细信息。该功能尚未移植到其他 Indy 服务器组件,您必须手动完成。

    您正在充当服务器client 决定是否启动 SSL/TLS 会话,您无法从服务器端执行此操作。 如果客户端想要在端口 25 上使用 SSL/TLS,它将通过 EHLO 命令查询您服务器的功能,然后如果它在报告中报告 STARTTLS,则向您的服务器发送 STARTTLS 命令它的EHLO 回复。 TIdSMTPServer 为您处理所有这些,您唯一需要做的就是为服务器分配一个 SSLIOHandler 并将TIdSMTPServer.UseTLS 属性设置为utUseRequireTLSutUseExplicitTLS

    【讨论】:

    • 是否可以根据端口更改TIdSMTPServer.UseTLS属性(端口465上的utUseImplicitTLS和端口25上的utUseExplicitTLS)或者它必须在启动时分配一次并保持不变SMTPServer 一直处于活动状态?
    • STARTTLS 命令(如果由客户端发出)是否可以保证端口 25 上的加密 SSL/TLS 连接?
    • 是的,这就是STARTTLS 的意义所在。客户端未加密连接,准备好时发送STARTTLS,如果服务器接受它,则他们交换 SSL/TLS 握手,从那时起所有内容都被加密。
    猜你喜欢
    • 1970-01-01
    • 2015-02-23
    • 2013-02-20
    • 2021-12-24
    • 2015-05-14
    • 1970-01-01
    相关资源
    最近更新 更多