如何从本地计算机通过SSL对Azure服务结构中的服务进行REST调用?

jv4diomz  于 2023-06-30  发布在  其他
关注(0)|答案(1)|浏览(90)

我已经按照这个https://matt.kotsenas.com/posts/https-in-service-fabric-web-api,在service fabric中创建了一个service。证书是从KV创建的。我从KV下载了证书。我想用本地的电话机打电话。403异常

var handler = new HttpClientHandler(); 

            var bytes = File.ReadAllBytes(certPath); 

            var cert = new X509Certificate2(bytes); 

 

            handler.ClientCertificates.Add(cert); 

            var httpRequestMessage = new HttpRequestMessage(HttpMethod.Get, apiUrl); 

            var httpClient = new HttpClient(handler); 

 

            var response = httpClient.SendAsync(httpRequestMessage).Result;

异常:内部异常1:HttpRequestException:发送请求时出错。
内部异常2:WebException:基础连接已关闭:无法为SSL/TLS安全通道建立信任关系。
内部异常3:AuthenticationException:根据验证过程,远程证书无效。
怎么打这个电话?

nue99wik

nue99wik1#

根据验证过程,这些异常显示远程证书无效。检查计算机上是否正确安装了证书。
ASP.NET Core service running on Service Fabric中启用HTTPS。
如果您有证书PFX文件,请将证书导入certificate store

PS C:\mycertificates> Import-PfxCertificate -FilePath .\mysslcertificate.pfx -CertStoreLocation Cert:\LocalMachine\My -Password (ConvertTo-SecureString "!Passw0rd321" -AsPlainText -Force)
private X509Certificate2 FindMatchingCertificateBySubject(string subjectCommonName)
{
    using (var store = new X509Store(StoreName.My, StoreLocation.LocalMachine))
    {
        store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadOnly);
        var certCollection = store.Certificates;
        var matchingCerts = new X509Certificate2Collection();
    
    foreach (var enumeratedCert in certCollection)
    {
      if (StringComparer.OrdinalIgnoreCase.Equals(subjectCommonName, enumeratedCert.GetNameInfo(X509NameType.SimpleName, forIssuer: false))
        && DateTime.Now < enumeratedCert.NotAfter
        && DateTime.Now >= enumeratedCert.NotBefore)
        {
          matchingCerts.Add(enumeratedCert);
        }
    }

        if (matchingCerts.Count == 0)
    {
        throw new Exception($"Could not find a match for a certificate with subject 'CN={subjectCommonName}'.");
    }
        
        return matchingCerts[0];
    }
}

在Azure应用服务中添加TLS/SSL certificates

configuring TLS mutual authentication适用于Azure应用服务。

有关详细信息,请参阅MS DocSO Link

相关问题