Настройка (https) SSL на локальном хосте для развития метеоров

Как создать самоподписанный SSL-сертификат для использования на локальном сервере на Mac 10.9?

Мне нужно, чтобы мой localhost работал как https://localhost

Я использую связанный API. Здесь объясняется функция, которая требует ssl на локальном хосте. https://developer.linkedin.com/documents/exchange-jsapi-tokens-rest-api-oauth-tokens

Вкратце, linkedin отправит клиенту маркер-носитель после того, как клиент разрешит моему приложению получать доступ к их данным. Встроенная библиотека javascript от linkedin автоматически отправит этот файл cookie на мой сервер/сервер. Эта информация о json файле используется для аутентификации пользователя.

Однако, linkedin не отправит приватный файл cookie, если сервер не является https.

Ответы

Ответ 1

Быстрое и простое решение, которое работает в режиме dev/prod, используя http-proxy ontop вашего приложения.

1) Добавьте в пакет tarang:ssl

meteor add tarang:ssl

2) Добавьте свой сертификат и ключ в каталог в своем приложении /private, например /private/key.pem и /private/cert.pem

Затем в вашем/серверном коде

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

Затем запустите приложение и загрузите https://localhost:6000. Убедитесь, что вы не смешиваете порты с https и http, поскольку они обслуживаются отдельно.

С этим я предполагаю, что вы знаете, как создать свой собственный самоподписанный сертификат, есть множество ресурсов о том, как это сделать. На всякий случай здесь есть некоторые ссылки.

Альтернатива самоподписанным сертификатам: лучше использовать официальный сертификат для домена ваших приложений и использовать /etc/hosts чтобы создать петлю на вашем локальном компьютере.. Это связано с тем, что его утомительно переключать сертификаты между dev и prod.

Ответ 2

Или вы можете просто использовать ngrok для пересылки вперед:)

1) запустите свой сервер (т.е. на localhost: 3000)

2) запустите ngrok из командной строки:./ngrok http 3000

который должен предоставить вам http и https URL-адреса для доступа с любого устройства

Ответ 3

Другим решением является использование NGINX. Следующие шаги протестированы на Mac El Capitan, если ваш локальный веб-сайт работает на порту 3000:

1. Добавьте хост на локальный компьютер:

Отредактируйте файл хоста: vi /etc/hosts

Добавьте строку для своего локального домена dev: 127.0.0.1 dev.yourdomain.com

Очистите кеш dscacheutil -flushcache

Теперь вы можете связаться с вашим местным веб-сайтом http://dev.yourdomain.com:3000

2. Создайте самоподписанный SSL, как описано здесь: http://mac-blog.org.ua/self-signed-ssl-for-nginx/

3. Установите nginx и настройте его, чтобы отобразить трафик https на ваш локальный веб-сайт:

brew install nginx

sudo nginx

Теперь вы сможете достичь http://localhost:8080 и получить сообщение Nginx.

Это значение по умолчанию, поэтому теперь вы должны установить https conf:

Отредактируйте файл conf:

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

Раскомментируйте раздел сервера HTTPS и измените следующие строки:

server_name dev.yourdomain.com;

Поместите свои сертификаты, которые вы только что создали:

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

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

Измените раздел местоположения следующим образом:

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

Перезагрузите nginx:

 sudo nginx -s stop
 sudo nginx 

И теперь вы должны иметь доступ к https://dev.yourdomain.com