2015-01-15 7 views
15

Wie erstellen Sie ein selbstsigniertes SSL-Zertifikat für die Verwendung auf dem lokalen Server auf Mac 10.9?Setup (https) SSL auf localhost für Meteor Entwicklung

benötige ich meinen localhost, der als https://localhost

ich den linkedin API verwenden. Die Funktion, die die SSL auf dem lokalen Host benötigt, wird hier erklärt.

Kurz gesagt, linkedin sendet dem Client ein Bearer-Token, nachdem der Client meine App autorisiert hat, auf ihre Daten zuzugreifen. Die eingebaute JavaScript-Bibliothek von linkedin wird diesen Cookie automatisch an meinen Server/Backend senden. Diese JSON-Dateiinformation wird für die Benutzerauthentifizierung verwendet.

Allerdings wird linkedin nicht den privaten Cookie senden, wenn der Server nicht https ist.

+0

Können Sie erklären, warum Sie das brauchen könnten? Ich bin nicht sicher, wie man davon profitieren würde, Verkehr zu ihrer lokalen Maschine ... von ihrer lokalen Maschine zu verschlüsseln –

+0

Ich habe ausgearbeitet. Ich habe auch einen Domain-Namen, der auf den Amazon-Tier-Server verweist. Ich habe es mit dem mup-Paket bereitgestellt. Ist es eine Überlegung wert, dass ich auf dem Amazon-Server entwickle oder das Prinzip Amazon-Serving ist und mein Localhost-Serving das gleiche ist. dh, keine größere Rekonfiguration zwischen dem lokalen Host und einem anderen Server – meteorBuzz

+2

Ich denke, das könnte Ihnen nützlich sein. https://gist.github.com/micho/1712812 Es gibt einen Link zu einem Artikel, wie man die selbstsignierte SSL einrichtet die Kommentare des Kerns auch. –

Antwort

19

Schnelle und einfache Lösung, die im dev/prod-Modus funktioniert, mit http-proxy ontop Ihrer App.

1) Fügen Sie in dem tarang:ssl Paket

meteor add tarang:ssl 

2) Fügen Sie Ihr Zertifikat und den Schlüssel in ein Verzeichnis in Ihrer App /private, zB /private/key.pem und /private/cert.pem

Dann in Ihrem/Server-Code

Meteor.startup(function() { 
    SSLProxy({ 
     port: 6000, //or 443 (normal port/requires sudo) 
     ssl : { 
      key: Assets.getText("key.pem"), 
      cert: Assets.getText("cert.pem"), 

      //Optional CA 
      //Assets.getText("ca.pem") 
     } 
    }); 
}); 

Dann feuern Sie Ihre App und laden https://localhost:6000. Achten Sie darauf, Ihre Ports nicht mit https und http zu verwechseln, da diese separat bedient werden.

Damit nehme ich an, Sie wissen, wie Sie Ihr eigenes selbstsigniertes Zertifikat erstellen, es gibt viele Ressourcen, wie dies zu tun ist. Nur für den Fall hier sind einige Links.

Eine Alternative zum Selbst signierten Zertifikaten: es besser sein kann, ein offizielles Zertifikat für Ihre Apps Domain und /etc/hoststo create a loopback on your local computer too verwenden zu verwenden. Dies liegt daran, dass es mühsam ist, zwischen dev und prod zu wechseln.

+0

Es würde für mich Sinn machen, ein Zertifikat zu kaufen, wie ich irgendwann muss. Ich werde die Amazon-Umgebung aufbauen und dort weiter entwickeln. Ich werde zurückkommen, um auf deine Antwort und das Meteor-Paket zu verweisen und dich wissen zu lassen, wie es mir geht. Danke für die detaillierten Schritte. – meteorBuzz

+0

Ich habe das Paket installiert und führte "sudo meteor --port https: // localhost: 443" im Terminal und die Anwendung läuft perfekt auf localhost: 443 Ich habe jetzt das JavaScript API Bearer Token erfolgreich erhalten. Tolles Paket! – meteorBuzz

+0

Frage. Was ist ca: Assets.getText ("ca.pem") korrekte Syntax um das Chain (Bundle) Zertifikat einzubinden? Danke Akshat – meteorBuzz

13

Oder Sie könnten nur ngrok zu Port verwenden vorwärts :)

1) starten Sie Ihren Server (dh bei localhost: 3000)

2) starten ngrok von der Kommandozeile: ./ngrok http 3000

, die Sie http und https-URLs für den Zugriff von einem beliebigen Gerät

+0

Eine einfache Lösung, die funktioniert –

+0

funktioniert nicht für alle meine Workflow. Aber es ist praktisch für den einfachen Anwendungsfall. –

+0

Ich musste "./grok http 3000" tun, damit dies funktioniert. – AshHimself

4

Andere Lösung ist NGINX verwenden geben sollte. Die folgenden Schritte werden auf Mac El Capitan getestet, vorausgesetzt, Ihre lokale Website wird auf Port 3000 ausgeführt:

1.Fügen Sie einen Host auf dem lokalen Rechner:

Bearbeiten Sie Ihre Host-Datei: vi /etc/hosts

eine Linie für die lokale dev Domäne hinzufügen: 127.0.0.1 dev.yourdomain.com

Flush Cache dscacheutil -flushcache

Jetzt sollten Sie in der Lage sein, So erreichen Sie Ihre lokale Website mit http://dev.yourdomain.com:3000

2. Erstellen Sie eine selbst signierte SSL wie hier erklärt: http://mac-blog.org.ua/self-signed-ssl-for-nginx/

3. nginx installieren und es so konfigurieren, dass Ihre lokale Website abzubilden https Verkehr:

brew install nginx

sudo nginx

Jetzt sollten Sie in der Lage sein http://localhost:8080 zu erreichen und eine Nginx-Nachricht erhalten.

Dies ist die Standard conf so dass Sie nun die https Conf gesetzt haben:

Bearbeiten Sie Ihre conf-Datei:

vi /usr/local/etc/nginx/nginx.conf

Kommentar- der HTTPS-Server-Abschnitt und ändern Sie folgende Zeilen:

server_name dev.yourdomain.com;

Legen Sie Ihre Zertifikate, die Sie gerade erstellt haben:

ssl_certificate /path-to-your-keys/nginx.pem;

ssl_certificate_key /path-to-your-keys/nginx.key;

Ändern Sie den Standort Abschnitt mit dieser:

location/{ 
      proxy_pass   http://localhost:3000; 
      proxy_set_header Host    $host; 
      proxy_set_header X-Real-IP  $remote_addr; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
      proxy_set_header X-Client-Verify SUCCESS; 
      proxy_set_header X-Client-DN  $ssl_client_s_dn; 
      proxy_set_header X-SSL-Subject $ssl_client_s_dn; 
      proxy_set_header X-SSL-Issuer  $ssl_client_i_dn; 
      proxy_read_timeout 1800; 
      proxy_connect_timeout 1800; 
     } 

Restart nginx:

sudo nginx -s stop 
sudo nginx 

Und jetzt sollten Sie in der Lage sein, den Zugriff auf https://dev.yourdomain.com