我有一个需求,我需要在我的本地docker compose网络中设置一个欺骗/模拟AWS服务器...这个需求是能够测试一组微服务而不会让微服务知道端点不是实际上是AWS。
例如,如果使用AWS-SDK的微服务尝试进行服务调用以创建队列,则它会对https://eu-west-1.queue.amazonaws.com进行调用。我安装了本地dns服务器,将其解析为反向代理服务器(Traefik),而反向代理服务器又将其解析为模拟服务器。
进行服务调用后,服务调用在反向代理级别失败,并指出以下错误
traefik_1 | time="2018-10-11T15:11:28Z" level=debug msg="http: TLS handshake error from 10.5.0.7:59058: remote error: tls: unknown certificate authority"
任何人都可以帮助我以成功拨打电话的方式来建立系统。...
答案 0 :(得分:3)
您将无法MITM https api请求并返回不同的响应。您可以为SDK提供一个不同的URL来进行命中(不带https或使用自签名证书),然后设置代理以将请求发送给亚马逊(如果希望将其发送到亚马逊),以及将请求发送到其他服务你想嘲笑他们。
关于如何在javascript SDK中更改api请求网址的一些随机信息:https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/specifying-endpoints.html(作为示例)
答案 1 :(得分:1)
tls: unknown certificate authority
基于此错误消息,您需要更新您环境中的受信任CA列表。这需要在将连接到模拟服务的每个映像(或生成的容器)中完成。该过程根据您选择的基本图像而有所不同,this question on unix.se涵盖了许多方法。
Debian进程:
apt-get install ca-certificates
cp cacert.pem /usr/share/ca-certificates
dpkg-reconfigure ca-certificates
CentOS进程:
cp cacert.pem /etc/pki/ca-trust/source/anchors/
update-ca-trust extract
高山过程:
apk add --no-cache ca-certificates
mkdir /usr/local/share/ca-certificates
cp cacert.pem /usr/local/share/ca-certificates/
update-ca-certificates
答案 2 :(得分:0)
您将努力/妥协以拦截AWS API调用,而无需绕过证书链的验证。
我建议您在NodeJS代码中向AWS开发工具包客户端提供Custom Endpoint,以指向LocalStack终端节点。可以在测试环境中使用环境变量来传递此值。
var sqsClient = new AWS.SQS(
{endpoint: process.env.SQSCLIENT}
);
然后将LocalStack URL传递到用于测试环境的容器中:
docker run mymicroservice -e SQSCLIENT='http://localstack:4576'