对 AWS Elastic Beanstalk 的 HTTPS 请求 returns net::ERR_CERT_COMMON_NAME_INVALID

HTTPS Request to AWS Elastic Beanstalk returns net::ERR_CERT_COMMON_NAME_INVALID

上下文

域设置:

使用此设置,my-site.com 正在尝试向我的 Flask 应用程序发送 HTTPS POST 请求,这是我的 API 应用程序,托管在 AWS Elastic Beanstalk 上。

Elastic Beanstalk 设置:

我想做什么

my-site.com 上,我正在尝试向我的 API 路由发送 HTTPS POST 请求:my-site-env.xxx-xxxxxx.us-west-1.elasticbeanstalk.com/api/register

const config = {
  headers: {
    'Content-Type': 'application/json',
  },
};

const body = JSON.stringify({ username, email, password });

const res = await axios.post(
  'https://my-site-env.x-xxxxxx.us-west-1.elasticbeanstalk.com/api/register',
  body,
  config
);

问题

my-site.com 尝试执行 POST 请求时,我收到此错误:

POST https://reddalerts-env.eba-my6f6vhk.us-west-1.elasticbeanstalk.com/api/register 
net::ERR_CERT_COMMON_NAME_INVALID

我相信我配置了 Elastic Beanstalk 的传入流量规则,以及接收 HTTPS 请求的侦听器。我是否缺少 DNS 设置的配置?

如果您使用 SSL 在您的 EB 平台上设置自己的域,您现在只能使用您的域(除非您强制例外并允许不安全的连接)。原因是您的 SSL 证书仅对已注册的域有效。

这意味着如果你在EB上使用https连接到你的网站,你只能使用你的域名。默认 EB 域将导致您收到错误,因为您的 SSL 证书不涵盖 EB 默认域。

附带说明一下,您无法注册 EB 默认域的有效 SSL 证书,因为该域属于 AWS,而 AWS 必须这样做。要注册有效的 SSL 证书,您必须拥有或管理您想要证书的域。

感谢@Marcin 消除了我的误解。我会把我为解决我的问题所做的具体放在他的回答之上。

即使请求来自我的域 my-site.com,它已使用我的 SSL 证书注册,但我的 HTTP/HTTPS 请求正在向 xxx-xxxxxx.us-west-1.elasticbeanstalk.com.[=17= 发出请求]

由于我将我的 EB 环境配置为侦听 SSL 证书,它只能接受来自使用我的 SSL 证书注册的域的请求。结果,我对 xxx-xxxxxx.us-west-1.elasticbeanstalk.com 的 HTTP/HTTPS 请求将无法工作。由于我的 EB 环境只接受来自用我的 SSL 证书注册的域的请求,我们必须使用 DNS 服务器和 CNAME 记录。

为了实现这一点,我在我的 DNS 服务器中创建了一个 CNAME 记录,它将请求发送到 api.my-site.com(在我的 SSL 证书中),并将请求重定向到我的 Elastic Beanstalk环境,xxx-xxxxxx.us-west-1.elasticbeanstalk.com.

然后我的 HTTP/HTTPS 请求被发送到 api.my-site.com,而不是 xxx-xxxxxx.us-west-1.elasticbeanstalk.com,例如:

const res = await axios.post(
  'https://api.reddalerts.com/api/login',
  body,
  config
);

现在 HTTP/HTTPS 请求是针对使用我的 EB 环境使用的 SSL 证书注册的域发出的,它已成功完成。