编辑
我现在意识到,我需要在服务器上安装一个证书,并分别验证客户端证书。我在看https://github.com/xavierjohn/ClientCertificateMiddleware
我认为证书必须来自AWSdoco-http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-supported-certificate-authorities-for-http-endpoints.html中列出的CA之一
该证书允许API建立到实例的HTTPS连接,并沿着可以验证的客户端证书传递。
原始帖子
我正在尝试配置一个新的微服务环境,我遇到了一些问题。
以下是我想要达到的目标:
gateway.company.com.au)services.company.com.au。为了防止客户端直接调用services.company.com.au,API配置了一个客户端证书。
在我的Web中,我正在构建web主机,如下所示:
.UseKestrel(options =>
{
options.Listen(new IPEndPoint(IPAddress.Any, 4430), listenOptions =>
{
const string certBody = "-----BEGIN CERTIFICATE----- Copied from API Gateway Client certificate -----END CERTIFICATE-----";
var cert = new X509Certificate2(Encoding.UTF8.GetBytes(certBody));
var httpsConnectionAdapterOptions = new HttpsConnectionAdapterOptions
{
ClientCertificateMode = ClientCertificateMode.AllowCertificate,
SslProtocols = System.Security.Authentication.SslProtocols.Tls,
ServerCertificate = cert
};
listenOptions.UseHttps(httpsConnectionAdapterOptions);
});
})我的DockerFile是:
FROM microsoft/aspnetcore:2.0
ARG source
WORKDIR /app
EXPOSE 80 443
COPY ${source:-obj/Docker/publish} .
ENTRYPOINT ["dotnet", "microservice.company.com.au.dll"]当我使用邮递员尝试访问该服务时,我会得到一个504 Gateway timeout。CloudWatch日志显示:
(e4d594b7-c8f3-11e7-8458-ef6f94e65b64) Sending request to http://microservice.company.com.au:30000/service
(e4d594b7-c8f3-11e7-8458-ef6f94e65b64) Execution failed due to an internal error
(e4d594b7-c8f3-11e7-8458-ef6f94e65b64) Method completed with status: 504我已经能够让以下架构工作起来:
不幸的是,由于API网关只能访问公共负载均衡器,这使得服务在应用程序负载均衡器的DNS上处于打开状态。
我不知道它在哪里失败,但我怀疑我没有正确地配置.NET核心/Kestrel来使用客户端证书终止SSL。
就这一总体架构而言,如果:
任何提示或建议都将被考虑,但目前,主要目标是使第一个体系结构工作。
我需要更多的信息,让我知道,我会更新这个问题。
发布于 2017-11-27 05:33:08
该问题是由附加到构成ECS集群的EC2实例的安全组造成的,该安全组不允许正确的端口范围。集群中每个EC2实例的安全组需要允许ECS动态端口范围。
https://stackoverflow.com/questions/47277897
复制相似问题