1
erfordern

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; 
     } 
    } 

Antwort

1

siehe meine Antwort hier AWS API Gateway - Use Client-Side SSL Certificates. Sicher, was Inkompatibilität mit NGINX ist - ich schaffte es, PoC zu erstellen und überprüfen Authentifizieren mit Client-SSL-Verhalten

+0

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

1

sie zum Zeitpunkt des Schreibens dieses Artikels scheint, dass API-Gateway ein known incompatibility with NGINX around Client Certificates hat.

+0

Man wirklich saugt, vor allem da die Hälfte ihrer unterstützten Plattformen für elastische Bohnenstange Nginx als Proxy-Server verwendet. Hast du irgendwelche Vorschläge, nur um Plattformen zu bewegen oder eigene zu bauen? – arjabbar

Verwandte Themen