无法将FabricClient验证到安全的Service Fabric Cluster

时间:2016-12-08 16:11:58

标签: azure authentication azure-service-fabric

我有一个安全的服务架构集群。相同的证书用作服务器证书和客户端身份验证。我无法在控制台应用程序中创建FabricClient,这将允许我连接到此群集。我正在使用“使用客户端证书连接到安全集群”下的here文档代码段:

static void Main(string[] args)
{
    string thumb = "‎1234567890123456789012345678901234567890";
    string CommonName = "somefabric.cloudapp.azure.com";
    string connection = "somefabric.cloudapp.azure.com:19000";

    try
    {
        X509Credentials xc = GetCredentials(thumb, thumb, CommonName);
        FabricClient fc = new FabricClient(xc, connection);
        Console.WriteLine("Cluster is connected");
    }
    catch (Exception e)
    {
        Console.WriteLine(e.Message);
    }
    Console.ReadKey();
}


static X509Credentials GetCredentials(string clientCertThumb, string serverCertThumb, string name)
{
    X509Credentials xc = new X509Credentials();

    // Client certificate
    xc.StoreLocation = StoreLocation.CurrentUser;
    xc.StoreName = "MY";
    xc.FindType = X509FindType.FindByThumbprint;
    xc.FindValue = clientCertThumb;

    // Server certificate
    xc.RemoteCertThumbprints.Add(serverCertThumb);
    xc.RemoteCommonNames.Add(name);

    xc.ProtectionLevel = ProtectionLevel.EncryptAndSign;
    return xc;
}

此代码导致

  

指定的X509指纹无效。

似乎证书确实通过其他方式授予我访问权限。我能够成功查看Fabric Explorer和 以下PowerShell命令也成功连接到群集

Connect-ServiceFabricCluster 
    -ConnectionEndpoint somefabric.cloudapp.azure.com:19000 
    -X509Credential 
    -FindType FindByThumbprint 
    -FindValue 1234567890123456789012345678901234567890 
    -StoreLocation CurrentUser 
    -StoreName MY 
    -ServerCertThumbprint 1234567890123456789012345678901234567890

我在这里做错了什么?

2 个答案:

答案 0 :(得分:3)

我猜测样本中提供的指纹和常用名称只是虚拟数据,因此您不必在此处发布实际值?但是,问题可能就是这个问题,如果你用实际值运行它,你仍会得到相同的异常吗?

E.g。

    string thumb = "‎1234567890123456789012345678901234567890";
    string CommonName = "somefabric.cloudapp.azure.com";
    string connection = "somefabric.cloudapp.azure.com:19000";

    try
    {
        X509Credentials xc = GetCredentials(thumb, thumb, CommonName);
        FabricClient fc = new FabricClient(xc, connection);
        Console.WriteLine("Cluster is connected");
    }
    catch (Exception e)
    {
        Console.WriteLine(e.Message);
    }

这将抛出异常The X509 thumbprint specified is invalid.。但是,如果将其更改为与Microsoft示例中相同:

    string clientCertThumb = "71DE04467C9ED0544D021098BCD44C71E183414E";
    string serverCertThumb = "A8136758F4AB8962AF2BF3F27921BE1DF67F4326";
    string CommonName = "www.clustername.westus.azure.com";
    string connection = "somefabric.westus.cloudapp.azure.com:19000";

    try
    {
        X509Credentials xc = GetCredentials(clientCertThumb, serverCertThumb, CommonName);
        FabricClient fc = new FabricClient(xc, connection);
        Console.WriteLine("Cluster is connected");
    }
    catch (Exception e)
    {
        Console.WriteLine(e.Message);
    }

现在,您将获得一个声明An error occurred during this operation. Please check the trace logs for more details.的异常。您收到此错误,因为群集somefabric.westus.cloudapp.azure.com不存在,您无法使用FabricClient连接到该地址,但证书指纹被识别为指纹。

将其替换为实际指纹,公共名称和与群集的连接将起作用。

详细说明:

在底层代码中的某处,Service Fabric实际验证了您的证书指纹。在这种情况下,证书的指纹是证书的SHA-1哈希值(通常是整个证书的内容格式),最终不会以1234567890123456789012345678901234567890作为实际哈希值。 Here is a nice blog entry解释了有关证书指纹解剖的更多信息。

此外,您不应使用与群集安全性相同的证书来实现客户端安全性: https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-cluster-security (请参阅本文末尾的注释)

  

Service Fabric群集上的所有管理操作都需要服务器证书。客户端证书不能用于管理。

检查证书

群集的证书应该是您第一次创建群集时提供的证书。您应该能够在持有它的密钥保管库中找到它。您还可以通过在Azure门户中查找群集资源来检查缩略图。单击群集资源下的“安全性”。 显示主证书的字段显示连接到群集时可以从群集中获得的缩略图。

Service Fabric cluster security settings

当您连接到Service Fabric Explorer(通常在端口19080)时,如果您检查为HTTPS连接提供的证书,也可以查看它。如果您单击证书的详细信息,则应在证书的属性中看到指纹。

Service Fabric

在允许访问之前,浏览器会询问您的客户端证书,此时您可以提供应该位于您计算机上的证书。 Select user certificate

之后,您应该可以通过查看浏览器中页面的安全性来查看证书详细信息。

enter image description here

如果您打开管理用户证书,您可以在Windows中找到本地证书,在这里您应该能够在个人/证书下找到您不想使用的证书。在详细信息下找到的缩略图应该与您在代码中显示的缩略图相同。在查看群集安全性时,它还应存在于Azure门户中的客户端证书列表中。如果不存在,则需要添加它。 Azure完成更新群集的安全性后,您应该能够连接该证书。 Manage User Certificates in Windows Manage User Certificate - details

答案 1 :(得分:2)

我忽略了这个确切的问题,但原因完全不同。

我很困惑;

  • https Explorer工作(在IExporer中)
  • Powershell Connect-ServiceFabricCluster也有效。
  • Visual Studio发布失败

我发现我的指纹值附加了4个不可见的字符,可能是剪切和粘贴操作的神器。怎么样,为什么?不知道

只有在我编辑了Deploy-FabricApplication以添加此行之后才能找到它。

$publishProfile.ClusterConnectionParameters|Format-List

就在

之前
[void](Connect-ServiceFabricCluster @ClusterConnectionParameters)

然后我看到不可见的字符显示为????在指纹结束时。

使用二进制编辑器打开Cloud.xml文件,我可以看到它们并删除它们。

然后我可以发布我的申请。