ELB 使用带有自签名证书的 HTTPS 到后端服务器

2023-12-06

我希望设置一个使用 HTTPS 与后端服务器通信的 ELB。我正在尝试使用单个后端服务器设置概念验证,但似乎无法让 ELB 与服务器通信。我几乎可以肯定这是一个证书问题,因为任何没有 SSL 的设置都可以完美运行。

我该如何设置?我尝试了多个答案和博客文章中的各种建议,但没有运气。

我现在正在做的是使用以下命令设置自签名证书(来自AWS ELB -> 使用自签名证书通过 HTTPS 的后端服务器):

$ openssl genrsa \
  -out /path/to/ssl.key 2048
$ openssl req \
  -sha256 \
  -new \
  -key /path/to/ssl.key \
  -out /path/to/ssl.csr
$ openssl x509 \
  -req \
  -days 365 \
  -in /path/to/ssl.csr \
  -signkey /path/to/ssl.key \
  -out /path/to/ssl.crt

我在签名时尝试了多个域名,并且可以使用它们进行curl:

curl https://[Public DNS, or private DNS or IP used to create the SSL crt]/status --cacert /path/to/ssl.crt

我应该在此处使用域/IP/DNS 条目吗?我感觉curl 至少有效。

目前我的 nginx 配置(在启用站点的文件中)如下所示:

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    ssl_certificate     /path/to/ssl.crt;
    ssl_certificate_key /path/to/ssl.key;

    server_name <dummy value of "_" or name used to make SSL certs>;
    client_max_body_size 20M;
    access_log  /var/log/nginx/access.log;
    error_log  /var/log/nginx/error.log;

    location / {
        proxy_pass         http://127.0.0.1:8000/;
        proxy_redirect     off;

        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
}

这与上面的curl 命令一起使用。

我尝试过经典负载均衡器和应用程序负载均衡器。对于经典,我尝试添加 ssl.crt 内容 - 我没有看到应用程序负载均衡器有类似的选项,但如果可能的话我想使用它们,因为它们可以非常轻松地转发 HTTP->HTTPS。无论哪种方式,经典负载均衡器或应用程序负载均衡器都不会与服务器通信。

对于缺少的内容有什么建议吗?或者如何确定缺少什么?


这已经很接近了,只是缺少一些小步骤。我用 ALB ELB 解决了这个问题。

首先,我使用了与此处描述的脚本类似的脚本:https://myopswork.com/how-to-do-end-to-end-encryption-of-data-in-transit-b-w-aws-alb-and-ec2-3b7fd917cddd

#!/bin/bash

DIR=$(dirname $0)

domain=$(uname -n)
echo "Generating SSL for $domain"
commonname="$domain"
country="US"
state="California"
locality="LA"
organization="My Inc."
organizationalunit="Org"
email="[email protected]"

# Optional
password=dummypassword

echo "Generating key request for $domain"

mkdir -p /etc/ssl/private
chmod 700 /etc/ssl/private
mkdir -p /etc/ssl/certs

# Generate a key
openssl genrsa -des3 -passout pass:$password -out /etc/ssl/private/$domain.key 2048 -noout

# Remove passphrase from the key. Comment the line out to keep the passphrase
echo "Removing passphrase from key"
openssl rsa -in /etc/ssl/private/$domain.key -passin pass:$password -out /etc/ssl/private/$domain.key

# Create the request
echo "Creating CSR"
openssl req -new -key /etc/ssl/private/$domain.key -out /etc/ssl/private/$domain.csr -passin pass:$password \
    -subj "/C=$country/ST=$state/L=$locality/O=$organization/OU=$organizationalunit/CN=$commonname/emailAddress=$email"

# Create the cert
openssl x509 -req -days 365 -in /etc/ssl/private/$domain.csr -signkey /etc/ssl/private/$domain.key -out /etc/ssl/certs/$domain.crt

# Setup nginx config
sed "s/{{hostname}}/${domain}/" < $DIR/template.conf > /etc/nginx/sites-available/site.conf
ln -sf /etc/nginx/sites-available/site.conf /etc/nginx/sites-enabled/site.conf

模板看起来像这样:

server {
    # listen 80 #uncomment to also listen on port 80 - useful for debugging
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name {{hostname}};

    ssl_certificate /etc/ssl/certs/{{hostname}}.crt;
    ssl_certificate_key /etc/ssl/private/{{hostname}}.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";

    add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
    add_header X-Frame-Options sameorigin;
    add_header X-Content-Type-Options nosniff;

    location / {
        ...
    }
}

该域名看起来像ip-172-10-11-12.

为了调试所有内容,我运行了一些东西like以下内容 - 这是凭记忆得出的,因此可能有细节。我首先确保可以通过点击 nginx 在本地卷曲服务器:

curl https://ip-172-10-11-12/healthcheck --cacert /etc/ssl/certs/ip-172-10-11-12.crt

然后我得到了 ELB 地址,并确保我可以对此进行卷曲。我必须使用可以访问 ELB 机器的机器。请注意,由于安全规则,ELB 不可 pinagable,但可卷曲。我相信我测试了这两种方式。首先,我尝试过:

curl https://elb-address/healthcheck --insecure

然后我将 ip-172-10-11-12 添加到 /etc/hosts 文件并尝试:

curl https://ip-172-10-11-12/healthcheck --cacert /cert/file/copied/onto/machine

一旦我开始工作,ALB ELB 就开始工作了。在最后一次调用起作用之前,我必须检查防火墙规则、AWS 安全组等。但当它起作用时,ELB 开始看到服务器。

我在调试时还有一个最终的见解:如果从公共互联网访问 ELB,则 ELB 必须只有公共子网,并且公共子网应与目标计算机位于同一可用区

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ELB 使用带有自签名证书的 HTTPS 到后端服务器 的相关文章

随机推荐

  • Java Graphics2D Rotate 中的图像质量遭到破坏

    我在使用 Graphics2D 旋转方法旋转图像时遇到问题 这是我遇到的问题的图片 当我移动球时 图像在旋转时完全扭曲 这是我的旋转方法 public static void rotate BufferedImage img Rectang
  • 从内存中运行可执行文件

    我正在尝试直接从该可执行文件的 byte 表示形式作为 C 中的资源运行该可执行文件 所以基本上我想直接运行PE的一个字节 而不接触硬盘 我为此使用的代码曾经有效 但现在不再有效 该代码创建一个具有冻结主线程的进程 更改整个进程数据 最后恢
  • 设置文本视图+编辑文本+按钮

    我想在同一行中放置一个 TextView Edittext 和一个按钮 但我遇到的问题是该按钮未正确向左对齐 并且在小屏幕中 edittext 被整个填充 Small screen Big Screen 我的编码如下
  • 另一个 JNI、C++、DLL、UnsatisfiedLinkError

    我已经找了两天了 没有任何解决方案可以帮助我 所以我们再次开始 如何修复 JNI 中的 UnsatisfiedLinkError 这是我的java代码 package org lingenio util import java util p
  • typescript 静态类型检查 ES 模块导出

    是一种静态类型检查 es 模块导出的方法吗 作为code描述如下 file ts export const x 4 export const y whatever export const foo gt 2 the interface de
  • 用于操作的 MVC [HttpPost/HttpGet]

    我正在使用 MVC C 有人可以举例说明为什么要使用 HttpPost HttpGet 对于一个动作 一个活性物如何能两者兼得 实际用途是什么 假设你有一个Login为用户提供登录屏幕的操作 然后在用户提交表单后接收回用户名和密码 publ
  • Hyperledger Fabric 1.4:如何测试和验证 Fabric Node SDK 中的 registerChaincodeEvent 函数?

    我目前在添加资产时从我的链代码发出一个事件 async addRequestNode ctx sampleAssetId sampleData console info Adding Sample Asset await ctx stub
  • 静态变量与单例变量

    我正在制作 Java REST 应用程序 我想知道我应该如何实现我的服务 我应该为整个应用程序使用静态服务变量还是像 Spring MVC 中那样将服务作为单例 单例对象和在应用过程中只初始化一次对象有什么区别吗 如果您想要一些实用方法或常
  • blazor 托管模板项目在发布应用程序后不起作用

    我从 dotnet CLI 创建一个新的 blazor 托管项目 名为 foo dotnet new blazorwasm hosted 我运行应用程序 dotnet run c Release 请求 https localhost 500
  • 当焦点文本输入反应本机时,滚动视图无法滚动

    我在 ScrollView 中有一个 TextInput 当 TextInput 获得焦点时 滚动不起作用 此问题仅影响 Android setting
  • 使用多个 MergedDictionaries 时,为什么样式在 wpf 运行时不起作用?

    如果我多次使用 MergedDictionaries 来定义样式 它在运行时不起作用 但在 VS2010 的 WPF 设计器中它可以起作用 如果在运行时使用代码加载 MergedDictionaries 它也可以工作 为什么会发生这种情况
  • 在 Windows 上构建 Xcode 项目

    我需要在 Windows 上编译 Xcode 项目 我不需要制作一个 因为它是自动生成的 我是 iOS 开发新手 我不打算提交到 App Store 或支付 Apple 100 美元来签名 我只是想构建一个可以安装在我的越狱设备上的 IPA
  • 当用户移动地图时捕获bounds_changed事件,但不捕获setCenter方法

    我想在用户移动地图 更改缩放时监听 bounds changed 事件 但我不希望当我的程序调用 setCenter 或 setZoom 方法时触发它 所以我尝试在设置中心之前删除事件 然后再次添加它 但是 这没有用 我的活动仍在被解雇 v
  • VS 2010:状态栏上的++文件符号是什么?

    我正在尝试在我的 Win 7 Pro 开发盒上的 XP 虚拟机中运行 VS 2010 它基本上可以工作 但是当在这种环境中实际编辑代码时 我的编辑能力会不断停止并在很长一段时间内断断续续 例如 每 50 秒的运行环境就会暂停 20 秒 这台
  • 如何使用 JQuery 重定向,加载另一个页面但在请求中发送一些 POST 参数?

    如何使用 JQuery DOJO 或纯 JavaScript 进行重定向 加载另一个页面但在请求中发送一些 POST 参数 这应该有效 但我还没有测试过 function postData url data var form
  • 什么是C本地函数声明机制?

    gcc 中似乎允许本地函数声明 我发现了对此的讨论 局部函数声明有什么用处吗 但是 我的问题是 ISO C 标准允许吗 如果是的话 如何解释以下令人费解的现象 int main void int f void f void g void g
  • Hashtable 中最大值的键

    嗨我有以下对象 Hashtable
  • Java应用程序使用系统中的最大可用内存

    有 Xmx 和 max heap size jnlp 选项来设置 java 应用程序可以使用的最大内存 如果未指定这些选项 则仅允许应用程序使用系统中少量的可用物理内存 这就是人们使用 Xmx 来允许应用程序使用更多内存的原因 但这对我来说
  • 如何在 Windows 批处理文件中回显 >>someText

    我想将确切的文本 gt gt someText 打印到控制台 I try echo abb gt gt cdd eee 但这不会打印任何内容并创建文件cdd里面有 abb 文本 我应该使用什么语法echo为了那个原因 你必须 转义 特殊字符
  • ELB 使用带有自签名证书的 HTTPS 到后端服务器

    我希望设置一个使用 HTTPS 与后端服务器通信的 ELB 我正在尝试使用单个后端服务器设置概念验证 但似乎无法让 ELB 与服务器通信 我几乎可以肯定这是一个证书问题 因为任何没有 SSL 的设置都可以完美运行 我该如何设置 我尝试了多个