连接到 Amazon S3 时的证书问题

问题描述

我的 C# 代码试图从 Amazon S3 存储桶中提取一些文件。此代码在我的开发以及 UAT 服务器上运行良好。但是,当我在生产服务器上运行它时,出现证书错误

UAT 和生产服务器之间的一个区别是,在 UAT 上对出站互联网访问没有限制。在生产服务器上,不允许免费出站互联网访问。我们仅根据要求打开选择性网址。

我们已经开放了对 s3.amazonaws.com 的访问。我们还使用 WinSCP 工具确保此访问正常工作。但是,当我的代码尝试执行相同操作时,出现以下错误

WinSCP.Sessionremoteexception:服务器证书验证失败:颁发者不受信任。

代码附在下面:

s3HostName = Convert.ToString(System.Configuration.ConfigurationManager.AppSettings["s3HostName"]);
s3UserName = Convert.ToString(System.Configuration.ConfigurationManager.AppSettings["s3UserName"]);
s3Password = Convert.ToString(System.Configuration.ConfigurationManager.AppSettings["s3Password"]);

LocalFilePath = Convert.ToString(System.Configuration.ConfigurationManager.AppSettings["LocalFilePath"]);
s3Folder = Convert.ToString(System.Configuration.ConfigurationManager.AppSettings["s3Folder"]);
LocalFileFolder = Convert.ToString(System.Configuration.ConfigurationManager.AppSettings["LocalFileFolder"]);

LocalFolder = LocalFilePath + yesterday + "\\";
Sessionoptions sessionoptions = new Sessionoptions
{
    Protocol = Protocol.S3,HostName = s3HostName,UserName = s3UserName,Password = s3Password,};
TransferOptions transferOptions = new TransferOptions();
transferOptions.TransferMode = WinSCP.TransferMode.Automatic;
transferOptions.FilePermissions = null;
transferOptions.PreserveTimestamp = false;

using (Session session = new Session())
{
    log.Debug("Open session for s3");
    session.Open(sessionoptions);
    if (!Directory.Exists(LocalFolder))
    {
        Directory.CreateDirectory(LocalFolder);
    }

    //to download files
    session.GetFiles(s3Folder + "*" + yesterday + ".csv",LocalFolder);
    session.Close();
    log.Debug("Closed session for s3");
    return "Success";
}

解决方法

使用书中最古老的技巧解决了该问题。重新安装了 WinSCP。现在一切正常。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...