抛出了状态为TrustFailure的WebException。从sharepoint 2010调用的AmazonS3 .net 3.5版本3

时间:2016-05-04 19:48:22

标签: c# amazon-s3 sharepoint-2010 aws-sdk

目前我正在POC中使用AmazonS3 Sdk进行CRUD操作.net 3.5版本3.我正在尝试使用密钥和访问密钥和存储桶名称检索特定存储桶名称的区域端点(位置)(具有位置) :欧盟(法兰克福)(欧洲中心-1))。为了建立联系 使用AmazonS3并执行CRUD操作 因此,当我尝试从共享点(网页我使用SharePoint的母版页创建我自己的页面)获取Region Endpoint以便使用Region Retrieve创建AmazonS3Client实例时,我获得了状态为TrustFailure的A WebException。
使用以下代码:

private string defaultAmazonHttpsHost = "https://s3.amazonaws.com";
private string defaultAmazonHttpHost = "http://s3.amazonaws.com"; 

private Amazon.RegionEndpoint GetRegionEndpoint(string bucket, BasicAWSCredentials amazonCredentials, bool useSSL)
{
    Amazon.RegionEndpoint regiongEndpoint = null;
    AmazonS3Config configurationClient = new AmazonS3Config();
    configurationClient.UseHttp = !useSSL;
    configurationClient.ServiceURL = useSSL ? defaultAmazonHttpsHost : defaultAmazonHttpHost;
    try
    {
        using (AmazonS3Client clientConnection = new AmazonS3Client(amazonCredentials, configurationClient))
        {
            GetBucketLocationRequest locationRequest = new GetBucketLocationRequest();
            locationRequest.BucketName = bucket;
            string locationName = clientConnection.GetBucketLocation(locationRequest).Location.Value;
            if (locationName.Equals("EU", StringComparison.InvariantCultureIgnoreCase))
            {
                regiongEndpoint = Amazon.RegionEndpoint.EUWest1;
            }
            else if (string.IsNullOrEmpty(locationName))
            {
                regiongEndpoint = Amazon.RegionEndpoint.USEast1;
            }
            else
            {
                regiongEndpoint = Amazon.RegionEndpoint.GetBySystemName(locationName);
            }
        }
    }
    catch (AmazonS3Exception amazonS3Exception)
    {
          throw amazonS3Exception;
    }
    catch (Exception unExpectedException)
    {
        throw unExpectedException;
    }
    return regiongEndpoint;
}
BasicAWSCredentials credentials = new BasicAWSCredentials("my access Key", "my secret key");
AmazonS3Config configurationAmazon = new AmazonS3Config();
configurationAmazon.RegionEndpoint = GetRegionEndpoint("bucketName", credentials, false);
 AmazonS3Client _s3 = new AmazonS3Client(credentials, configurationAmazon );

我的任务执行CRUD操作+与AmazonS3 Sdk .net 3.5版本3的测试连接,包含源信息: -密钥 - 访问密钥 - 存储桶名称

奇怪的是,如果这个部分代码运行(执行),因为另一个项目(没有共享点交互,例如:Console Project)我没有得到这个异常)你知道这是什么问题吗?

3 个答案:

答案 0 :(得分:1)

我在执行对amazonS3的任何请求之前使用了以下内容,现在它按预期工作我认为问题出在sharepoint使用的证书上。

ServicePointManager.ServerCertificateValidationCallback +=   
delegate(  
    object sender,   
    X509Certificate certificate,   
    X509Chain chain,   
    SslPolicyErrors sslPolicyErrors)  
    {  
         return true;  
    };  

post提供了有关它的解释

答案 1 :(得分:0)

这里的关键点是" TrustFailure"。证书出了问题。在我的情况下,这个错误是由于我的公司使用Websense,一个Web过滤器/安全套件截取并重新发布用于Web流量的https证书,因此它可以监视您。即使您没有使用类似的东西,最重要的是您的计算机不信任远程计算机使用的证书的颁发者。我收到此错误的服务器在其受信任的根证书颁发机构中没有正确的证书。导入正确的受信任根证书(Add trusted root certificate authority to local computer)后,我不再收到错误。

如果您认为不是这种情况,您可以通过将详细信息写入控制台或在Console.WriteLine上设置断点并实际检查证书和ssl来获取有关异常的详细信息。错误:

using System.Security.Cryptography.X509Certificates;
using System.Net.Security;

.....
.....
//before you make the request
System.Net.ServicePointManager.ServerCertificateValidationCallback +=
delegate (
    object sender,
    X509Certificate certificate,
    X509Chain chain,
    SslPolicyErrors sslPolicyErrors)
{
    Console.WriteLine("Subject: " + certificate.Subject + ", Issuer: " + certificate.Issuer + ". SSL Errors: " + sslPolicyErrors.ToString());
    return false;
};

这里的关键点是你需要找到证书问题并解决它,而不是忽视所有的ssl错误而让自己变得脆弱。

答案 2 :(得分:0)

TrustFailure也可能由机器上的日期不正确引起。