HTTPs在具有Docker容器的服务结构中不起作用

HTTPs在具有Docker容器的服务结构中不起作用,docker,ssl,https,.net-core,azure-service-fabric,Docker,Ssl,Https,.net Core,Azure Service Fabric,我正在开发一个自托管的.Net Core Rest API,该API将托管在ServiceFabric中的Docker容器中。我无法在服务结构中配置SSL/Https。Http似乎可以工作。我使用HttpSys作为web服务器,而不是Kestrel,因为我了解到,对于没有反向代理的服务(如IIS),不建议使用它 下面是web服务器代码片段 return WebHost.CreateDefaultBuilder(args) .UseApplicationInsights()

我正在开发一个自托管的.Net Core Rest API,该API将托管在ServiceFabric中的Docker容器中。我无法在服务结构中配置SSL/Https。Http似乎可以工作。我使用HttpSys作为web服务器,而不是Kestrel,因为我了解到,对于没有反向代理的服务(如IIS),不建议使用它

下面是web服务器代码片段

return WebHost.CreateDefaultBuilder(args)
            .UseApplicationInsights()
                .UseStartup<Startup>()
                .UseHttpSys(
                    options =>
                    {
                        options.Authentication.Schemes = AspNetCore.Server.HttpSys.AuthenticationSchemes.None;
                        options.Authentication.AllowAnonymous = true;
                    }
                )                  
                .Build();
<EnvironmentVariable Name="ASPNETCORE_URLS" Value="https://*:443/;http://*:80/"/>
返回WebHost.CreateDefaultBuilder(args)
.UseApplicationInsights()
.UseStartup()
.UseHttpSys(
选项=>
{
options.Authentication.Schemes=AspNetCore.Server.HttpSys.AuthenticationSchemes.None;
options.Authentication.AllowAnonymous=true;
}
)                  
.Build();
下面是ServiceManifest.xml端点代码段

<Endpoints>      
  <Endpoint Name="ServiceEndpoint" Protocol="http" Port="80" />
  <Endpoint Name="ServiceEndpointHttps" Protocol="https" Port="443" Type="Input" CertificateRef="SSLCertificate" />
</Endpoints>
<Policies>
  <ContainerHostPolicies CodePackageRef="Code">
    <RepositoryCredentials AccountName="accountname" Password="password" PasswordEncrypted="false" />
    <PortBinding ContainerPort="80" EndpointRef="ServiceEndpoint"/>
    <PortBinding ContainerPort="443" EndpointRef="ServiceEndpointHttps"/> 
  </ContainerHostPolicies>
  <EndpointBindingPolicy CertificateRef="SSLCertificate" EndpointRef="ServiceEndpointHttps" />
</Policies>
<Certificates>
<EndpointCertificate Name="SSLCertificate" X509FindValue="cert thumbprint"/>
</Certificates>

下面是ApplicationManifest环境变量片段

return WebHost.CreateDefaultBuilder(args)
            .UseApplicationInsights()
                .UseStartup<Startup>()
                .UseHttpSys(
                    options =>
                    {
                        options.Authentication.Schemes = AspNetCore.Server.HttpSys.AuthenticationSchemes.None;
                        options.Authentication.AllowAnonymous = true;
                    }
                )                  
                .Build();
<EnvironmentVariable Name="ASPNETCORE_URLS" Value="https://*:443/;http://*:80/"/>

下面是ApplicationManifest.xml策略片段

<Endpoints>      
  <Endpoint Name="ServiceEndpoint" Protocol="http" Port="80" />
  <Endpoint Name="ServiceEndpointHttps" Protocol="https" Port="443" Type="Input" CertificateRef="SSLCertificate" />
</Endpoints>
<Policies>
  <ContainerHostPolicies CodePackageRef="Code">
    <RepositoryCredentials AccountName="accountname" Password="password" PasswordEncrypted="false" />
    <PortBinding ContainerPort="80" EndpointRef="ServiceEndpoint"/>
    <PortBinding ContainerPort="443" EndpointRef="ServiceEndpointHttps"/> 
  </ContainerHostPolicies>
  <EndpointBindingPolicy CertificateRef="SSLCertificate" EndpointRef="ServiceEndpointHttps" />
</Policies>
<Certificates>
<EndpointCertificate Name="SSLCertificate" X509FindValue="cert thumbprint"/>
</Certificates>

下面是ApplicationManifest.xml证书片段

<Endpoints>      
  <Endpoint Name="ServiceEndpoint" Protocol="http" Port="80" />
  <Endpoint Name="ServiceEndpointHttps" Protocol="https" Port="443" Type="Input" CertificateRef="SSLCertificate" />
</Endpoints>
<Policies>
  <ContainerHostPolicies CodePackageRef="Code">
    <RepositoryCredentials AccountName="accountname" Password="password" PasswordEncrypted="false" />
    <PortBinding ContainerPort="80" EndpointRef="ServiceEndpoint"/>
    <PortBinding ContainerPort="443" EndpointRef="ServiceEndpointHttps"/> 
  </ContainerHostPolicies>
  <EndpointBindingPolicy CertificateRef="SSLCertificate" EndpointRef="ServiceEndpointHttps" />
</Policies>
<Certificates>
<EndpointCertificate Name="SSLCertificate" X509FindValue="cert thumbprint"/>
</Certificates>

最初,当我仅在CurrentUser\My Certificate Store中拥有SSL证书时,我遇到了证书部署问题。在LocalMachine\My certificate Store中部署证书后,我解决了此问题。使用此修复程序,该服务似乎只能在端口80中使用HTTP协议,而不能在端口443中使用HTTPS协议

Service Fabric Explorer不会在事件日志中显示任何错误,也不会显示任何错误。我在本地服务结构和Azure服务结构实例中都面临这个问题


如果您对此有任何想法/建议,我们将不胜感激。

使用容器和https的服务结构可以遵循这一点

它将把证书作为环境变量注入容器中

但是对于linux集群,存在一个问题。证书\u ServicePackageName\u CodePackageName\u CertName\u PEM证书\u ServicePackageName\u CodePackageName\u CertName\u PrivateKey表示的文件具有完全相同的内容


我正在等待Azure中国支持者对此的进一步澄清,不确定这是否是中国特有的问题。

您使用什么基础操作系统作为服务结构,Windows还是Ubuntu?服务结构使用Windows操作系统。请查看此信息,将linux容器部署到服务结构。您好。。你有解决这个问题的办法吗。