Hier ist meine Situation:Ist es möglich, ein selbst signierte Zertifikat mit einer EC2-Instanz zu verwenden, die ein Client-Zertifikat von API-Gateway
I Elastic Beanstalk bin mit einer einzigen EC2-Instanz ohne ELB spin up. Ich möchte, dass die Instanz nur über das API-Gateway zugänglich ist. Also ging ich den Weg der Verwendung von clientseitigen Zertifikaten für die Authentifizierung, wie beschrieben here.
Meine EC2-Instanz verfügt über Nginx, das eine Rails-Anwendung bedient. Ich habe auf meinem Rechner ein selbstsigniertes Zertifikat erstellt und Nginx so konfiguriert, dass damit über https geantwortet werden kann.
Alles scheint in Ordnung, aber wenn ich versuche, meine Proxy-Endpunkt aus der API-Gateway-Konsole aufzurufen, erhalte ich eine 500-Fehler wie unten:
...
Thu Sep 14 02:27:05 UTC 2017 : Endpoint request URI: https://xxxxxxxxx.xxxxxxxxx.us-east-1.elasticbeanstalk.com/health
Thu Sep 14 02:27:05 UTC 2017 : Endpoint request headers: {x-amzn-apigateway-api-id=xxxxxxxxx, User-Agent=AmazonAPIGateway_xxxxxxxx, Accept-Encoding=identity}
Thu Sep 14 02:27:05 UTC 2017 : Endpoint request body after transformations:
Thu Sep 14 02:27:05 UTC 2017 : Sending request to https://xxxxxxxxx.xxxxxxxx.us-east-1.elasticbeanstalk.com/health
Thu Sep 14 02:27:05 UTC 2017 : Execution failed due to configuration error: General SSLEngine problem
Thu Sep 14 02:27:05 UTC 2017 : Method completed with status: 500
Ich denke, dass es etwas mit dem zu tun hat, Tatsache, dass ich ein selbstsigniertes Zertifikat im Backend verwende. Muss ich wirklich ein legitimes Zertifikat kaufen, um meine Einrichtung abzuschließen? Gibt es andere Lösungen, die es mir erlauben, Anfragen nur über das API-Gateway an meine EC2-Instanz zu akzeptieren?
Ich schaute auf die Lambda-Methode, die here beschrieben wird, aber ich wollte keine Komplexität oder Latenz zu den Anforderungen hinzufügen.
Hier ist meine Nginx Konfiguration der Vollständigkeit halber:
server {
listen 443;
server_name localhost;
ssl on;
ssl_certificate /etc/pki/tls/certs/server.crt;
ssl_certificate_key /etc/pki/tls/certs/server.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_prefer_server_ciphers on;
ssl_client_certificate /etc/pki/tls/certs/api_gateway.cer;
ssl_verify_client on;
if ($ssl_protocol = "") {
return 444;
}
}
Ok, ich werde es versuchen und sehen, ob es funktioniert. Habe die certbot-Schritte nicht durchlaufen. Das bedeutet, dass ich zuerst einen CNAME-Datensatz abrufen muss, der auf die Domäne meiner EB-Umgebung verweist? Oder kann ich die dynamische von AWS verwenden und diese als Servername in meine Nginx-Konfiguration einfügen? Vielen Dank. – arjabbar