连接到 Amazon S3 时的证书问题
Certificate Issues while connecting to Amazon S3
我的 C# 代码正在尝试从 Amazon S3 存储桶中提取一些文件。此代码在我的开发以及 UAT 服务器上运行良好。但是,当我 运行 在生产服务器上执行此操作时,出现证书错误。
UAT 和生产服务器之间的一个区别是 UAT 对出站互联网访问没有限制。在生产服务器上,不允许免费出站互联网访问。我们只根据要求打开选择性 URL。
我们已经开放了对 s3.amazonaws.com 的访问。我们还使用 WinSCP 工具确保此访问正常工作。但是,当我的代码尝试执行相同操作时,我收到以下错误:
WinSCP.SessionRemoteException: Server Certificate Verification Failed: Issuer is not trusted.
下面附上源码:
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。现在一切正常。
我的 C# 代码正在尝试从 Amazon S3 存储桶中提取一些文件。此代码在我的开发以及 UAT 服务器上运行良好。但是,当我 运行 在生产服务器上执行此操作时,出现证书错误。
UAT 和生产服务器之间的一个区别是 UAT 对出站互联网访问没有限制。在生产服务器上,不允许免费出站互联网访问。我们只根据要求打开选择性 URL。
我们已经开放了对 s3.amazonaws.com 的访问。我们还使用 WinSCP 工具确保此访问正常工作。但是,当我的代码尝试执行相同操作时,我收到以下错误:
WinSCP.SessionRemoteException: Server Certificate Verification Failed: Issuer is not trusted.
下面附上源码:
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。现在一切正常。