Beenden von HTTPS auf EC2-Instances, auf denen Ruby ausgeführt wird
Bei Ruby-Containertypen hängt die Art und Weise der HTTPS-Aktivierung vom eingesetzten Anwendungsserver ab.
Konfigurieren von HTTPS für Ruby mit Puma
Verwenden Sie bei Ruby-Containertypen, die einen Puma-Anwendungsserver nutzen, eine Konfigurationsdatei für die HTTPS-Aktivierung.
Fügen Sie der Konfigurationsdatei das folgende Snippet hinzu, folgen Sie den Anweisungen, um die Daten für Zertifikat und privaten Schlüssel zu ersetzen, und speichern Sie dies im Quell-Bundle im Verzeichnis .ebextensions
. Von der Konfigurationsdatei werden folgende Schritte ausgeführt:
-
Der Schlüssel
files
generiert folgende Dateien auf der Instance:/etc/nginx/conf.d/https.conf
-
Konfiguriert den nginx-Server. Diese Datei wird mit dem Start des nginx-Service geladen.
/etc/pki/tls/certs/server.crt
-
Damit wird die Zertifikatdatei auf der Instance erstellt. Ersetzen Sie den
Inhalt der Zertifikatdatei
durch den Inhalt Ihres Zertifikats.Anmerkung
Für YAML sind konsistente Einrückungen erforderlich. Wählen Sie die entsprechende Einrückungsebene aus, wenn Sie Inhalte in einer Beispielkonfigurationsdatei ersetzen, und stellen Sie sicher, dass Ihr Texteditor Leerzeichen statt Tabulatorzeichen zum Einrücken verwendet.
Wenn Zwischenzertifikate vorhanden sind, nehmen Sie sie nach Ihrem Site-Zertifikat in
server.crt
auf.-----BEGIN CERTIFICATE-----
certificate file contents
-----END CERTIFICATE----------BEGIN CERTIFICATE-----
first intermediate certificate
-----END CERTIFICATE----- -----BEGIN CERTIFICATE-----second intermediate certificate
-----END CERTIFICATE----- /etc/pki/tls/certs/server.key
-
Damit wird die private Schlüsseldatei auf der Instance erstellt. Ersetzen Sie den
Inhalt des privaten Schlüssels
durch den Inhalt des privaten Schlüssels, mit dem Sie die Zertifikatanforderung oder das selbstsignierte Zertifikat erstellt haben.
-
Mit dem Schlüssel
container_commands
wird der nginx-Server nach Abschluss der Konfiguration neu gestartet, damit der Server die neuehttps.conf
-Datei verwendet.
Beispiel .ebextensions/https-instance.config
files:
/etc/nginx/conf.d/https.conf:
content: |
# HTTPS server
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_prefer_server_ciphers on;
location / {
proxy_pass http://my_app;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}
location /assets {
alias /var/app/current/public/assets;
gzip_static on;
gzip on;
expires max;
add_header Cache-Control public;
}
location /public {
alias /var/app/current/public;
gzip_static on;
gzip on;
expires max;
add_header Cache-Control public;
}
}
/etc/pki/tls/certs/server.crt:
content: |
-----BEGIN CERTIFICATE-----
certificate file contents
-----END CERTIFICATE-----
/etc/pki/tls/certs/server.key:
content: |
-----BEGIN RSA PRIVATE KEY-----
private key contents
# See note below.
-----END RSA PRIVATE KEY-----
container_commands:
01restart_nginx:
command: "service nginx restart"
Anmerkung
Führen Sie möglichst keinen Commit für eine Konfigurationsdatei, die Ihren privaten Schlüssel enthält, an die Quellüberwachung durch. Nachdem Sie die Konfiguration getestet haben, speichern Sie Ihren privaten Schlüssel in Amazon S3 und ändern Sie die Konfiguration, um sie während der Bereitstellung herunterzuladen. Detaillierte Anweisungen finden Sie unter Sicheres Speichern von privaten Schlüsseln in Amazon S3.
In einer einzelnen Instance-Umgebung müssen Sie außerdem die Sicherheitsgruppe der Instance ändern, damit Datenverkehr über Port 443 zugelassen wird. Mit der folgenden Konfigurationsdatei wird die ID der Sicherheitsgruppe mit einer AWS CloudFormation-Funktion abgerufen und eine Regel hinzugefügt.
Beispiel .ebextensions/https-instance-single.config
Resources:
sslSecurityGroupIngress:
Type: AWS::EC2::SecurityGroupIngress
Properties:
GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
IpProtocol: tcp
ToPort: 443
FromPort: 443
CidrIp: 0.0.0.0/0
Bei einer Umgebung mit Load Balancer konfigurieren Sie den Load Balancer entweder so, dass sicherer Datenverkehr unangetastet durchgelassen wird, oder für Verschlüsseln und erneutes Entschlüsseln mit End-to-End-Verschlüsselung.
Konfigurieren von HTTPS für Ruby mit Passenger
Verwenden Sie bei Ruby-Containertypen, die einen Passenger-Anwendungsserver nutzen, sowohl eine Konfigurationsdatei als auch eine JSON-Datei für die HTTPS-Aktivierung.
So konfigurieren Sie HTTPS für Ruby mit Passenger
-
Fügen Sie der Konfigurationsdatei das folgende Snippet hinzu, folgen Sie den Anweisungen, um die Daten für Zertifikat und privaten Schlüssel zu ersetzen, und speichern Sie dies im Quell-Bundle im Verzeichnis
.ebextensions
. Von der Konfigurationsdatei werden folgende Schritte ausgeführt:-
Der Schlüssel
files
generiert folgende Dateien auf der Instance:/etc/pki/tls/certs/server.crt
-
Damit wird die Zertifikatdatei auf der Instance erstellt. Ersetzen Sie den
Inhalt der Zertifikatdatei
durch den Inhalt Ihres Zertifikats.Anmerkung
Für YAML sind konsistente Einrückungen erforderlich. Wählen Sie die entsprechende Einrückungsebene aus, wenn Sie Inhalte in einer Beispielkonfigurationsdatei ersetzen, und stellen Sie sicher, dass Ihr Texteditor Leerzeichen statt Tabulatorzeichen zum Einrücken verwendet.
Wenn Zwischenzertifikate vorhanden sind, nehmen Sie sie nach Ihrem Site-Zertifikat in
server.crt
auf.-----BEGIN CERTIFICATE-----
certificate file contents
-----END CERTIFICATE----------BEGIN CERTIFICATE-----
first intermediate certificate
-----END CERTIFICATE----- -----BEGIN CERTIFICATE-----second intermediate certificate
-----END CERTIFICATE----- /etc/pki/tls/certs/server.key
-
Damit wird die private Schlüsseldatei auf der Instance erstellt. Ersetzen Sie den
Inhalt des privaten Schlüssels
durch den Inhalt des privaten Schlüssels, mit dem Sie die Zertifikatanforderung oder das selbstsignierte Zertifikat erstellt haben.
Beispiel .Ebextensions-Snippet zum Konfigurieren von HTTPS für Ruby mit Passenger
files: /etc/pki/tls/certs/server.crt: content: | -----BEGIN CERTIFICATE-----
certificate file contents
-----END CERTIFICATE----- /etc/pki/tls/certs/server.key: content: | -----BEGIN RSA PRIVATE KEY-----private key contents
# See note below. -----END RSA PRIVATE KEY-----Anmerkung
Führen Sie möglichst keinen Commit für eine Konfigurationsdatei, die Ihren privaten Schlüssel enthält, an die Quellüberwachung durch. Nachdem Sie die Konfiguration getestet haben, speichern Sie Ihren privaten Schlüssel in Amazon S3 und ändern Sie die Konfiguration, um sie während der Bereitstellung herunterzuladen. Detaillierte Anweisungen finden Sie unter Sicheres Speichern von privaten Schlüsseln in Amazon S3.
-
-
Erstellen Sie eine Textdatei und fügen Sie die folgenden JSON-Daten ein. Speichern Sie die Datei im Stammverzeichnis des Quell-Bundles mit dem Namen
passenger-standalone.json
. Mit dieser JSON-Datei wird Passenger für die Verwendung von HTTPS konfiguriert.Wichtig
Die JSON-Datei darf keine Markierung der Bytereihenfolge enthalten. Sollte das der Fall sein, kann die Passenger-JSON-Bibliothek die Datei nicht korrekt lesen und der Passenger-Service wird nicht gestartet.
Beispiel passenger-standalone.json
{ "ssl" : true, "ssl_port" : 443, "ssl_certificate" : "/etc/pki/tls/certs/server.crt", "ssl_certificate_key" : "/etc/pki/tls/certs/server.key" }
In einer einzelnen Instance-Umgebung müssen Sie außerdem die Sicherheitsgruppe der Instance ändern, damit Datenverkehr über Port 443 zugelassen wird. Mit der folgenden Konfigurationsdatei wird die ID der Sicherheitsgruppe mit einer AWS CloudFormation-Funktion abgerufen und eine Regel hinzugefügt.
Beispiel .ebextensions/https-instance-single.config
Resources:
sslSecurityGroupIngress:
Type: AWS::EC2::SecurityGroupIngress
Properties:
GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
IpProtocol: tcp
ToPort: 443
FromPort: 443
CidrIp: 0.0.0.0/0
Bei einer Umgebung mit Load Balancer konfigurieren Sie den Load Balancer entweder so, dass sicherer Datenverkehr unangetastet durchgelassen wird, oder für Verschlüsseln und erneutes Entschlüsseln mit End-to-End-Verschlüsselung.