服务结构上的 https 请求返回“无法安全连接到此页面”

Posted

技术标签:

【中文标题】服务结构上的 https 请求返回“无法安全连接到此页面”【英文标题】:https request on Service fabric returns a "Can’t connect securely to this page" 【发布时间】:2019-12-03 15:22:30 【问题描述】:

我有一个 Asp.net MVC 应用程序,我在 docker 中进行了容器化并部署在 Service Fabric 上。该应用程序与 HTTP 完美配合,但在尝试启用 HTTPS 时,服务会以 无法安全连接到此页面 进行响应 Fabric 集群上已安装通配符证书。 DockerFile 看起来像

FROM  mcr.microsoft.com/windows/servercore:1803
ARG source
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]
WORKDIR /inetpub/wwwroot
COPY $source . 
RUN Add-WindowsFeature Web-Server; `
    Add-WindowsFeature NET-Framework-45-ASPNET; `
    Add-WindowsFeature Web-Asp-Net45; 
HEALTHCHECK   --retries=5  --interval=100s --start-period=10s   CMD curl --fail http://localhost || exit 1 
EXPOSE 80 

服务清单具有以下端点

<Resources>
<Endpoints>
  <!-- This endpoint is used by the communication listener to obtain the port on which to 
       listen. Please note that if your service is partitioned, this port is shared with 
       replicas of different partitions that are placed in your code. -->
  <Endpoint Name="BookingApiServiceTypeEndpoint"  UriScheme="https" Protocol="https" Type="Input" Port="61650" />
</Endpoints></Resources>

应用程序清单具有以下 ServiceManifestImport

<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="BookingApiServicePkg" ServiceManifestVersion="1.0.0" />
<ConfigOverrides />
<Policies>
  <ContainerHostPolicies CodePackageRef="Code" AutoRemove="false" UseDefaultRepositoryCredentials="false" ContainersRetentionCount="2"  RunInteractive="true">
     <PortBinding ContainerPort="80" EndpointRef="BookingApiServiceTypeEndpoint"  />        
    <HealthConfig IncludeDockerHealthStatusInSystemHealthReport="true" RestartContainerOnUnhealthyDockerHealthStatus="false"/>
   </ContainerHostPolicies>
  <EndpointBindingPolicy EndpointRef="BookingApiServiceTypeEndpoint" CertificateRef="HttpsCert" />
</Policies></ServiceManifestImport>

服务标签为

 <Service Name="BookingApiService" ServiceDnsName="bookingapi.dutchhub.com" ServicePackageActivationMode="ExclusiveProcess">
  <StatelessService ServiceTypeName="BookingApiServiceType" InstanceCount="1">
    <SingletonPartition />
  </StatelessService></Service>

和证书标记为

 <Certificates>
<EndpointCertificate X509FindValue="[HttpsCertThumbprint]" Name="HttpsCert"/> </Certificates>

【问题讨论】:

【参考方案1】:PortBinding 更改为目标端口 443 将 IIS 配置为使用端口 443 和有效证书 更改 dockerfile 以公开端口 443 在负载均衡器上打开端口 443

更多信息在this walkthrough

【讨论】:

你的意思是容器中的 IIS 吗? 所以容器和fabric集群都需要安装证书? 我相信只有容器需要它,除非你也在不使用容器的情况下运行服务。

以上是关于服务结构上的 https 请求返回“无法安全连接到此页面”的主要内容,如果未能解决你的问题,请参考以下文章

iphone上的HTTPS请求未发送到服务器

HTTP和HTTPS的区别

Nginx教程

https 上的 NSURLConnection 同步请求

nginx+keepalived

ECS API调用方式