Сегодня, после бесчисленных метаний, наконец-то свершилась долгожданная регистрация доменного имени. Так что мне не терпится развернуть и перенести мой личный веб-сайт блога на HTTPS.Я столкнулся с некоторыми ямами посередине, поэтому я сделаю запись здесь.
причина
Причины перехода сайта с http на https:
- HTTPS более безопасен и может более эффективно предотвращать атаки «человек посередине», чем HTTP.Каждый проект надеется иметь безопасную базу. Хотя в блоге нет важных данных, это хорошее место для обучения войск.
- Сейчас HTTP2 привлекает все больше и больше внимания, он может улучшить скорость доступа, а предпосылкой HTTP2 является HTTPS.
шаг
- Установить сертификат
- обратный прокси nginx
- Измените метод внешнего подключения
Установить сертификат
Зачем нужен сертификат? Это связано с дизайном протокола HTTPS. HTTPS, относящийся к безопасному протоколу передачи гипертекста, также может называться HTTP через SSL или HTTP через TLS. Проще говоря, HTTPS передает данные по протоколу Http, а SSL/TLS шифрует данные.
Как он реализует шифрование?
Во-первых, производители браузеров предварительно устанавливают каждый证书颁发机构
сертификат для безопасной проверки доступа к сайту
Затем лично证书颁发机构
Запросите личный сертификат и примените сертификат к конфигурации сервера.
Затем браузер обращается к серверу, получает открытый ключ, сопоставляет его с существующим списком сертификатов и решает, следует ли продолжать.
Если он проходит, браузер связывается с сервером через открытый ключ и согласовывает два асимметричных закрытых ключа для их соответствующего шифрования передачи данных, тем самым устанавливая зашифрованный канал для предотвращения прослушивания посредником.
Как установить сертификат? Подать заявку на сертификат в центре сертификации. Текущие агентства включают Symantec, Comodo, GoDaddy и Let's Certbot. Здесь мы выбираем бесплатноLet's Certbot.
На официальном сайте есть подробная инструкция. моя средаLinux 16.04 Nginx
, другие среды могут ссылаться на официальное описание веб-сайта:
#####Установить:
$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install python-certbot-nginx
Начинать
$ sudo certbot --nginx certonly
авто-обновление
может относиться кздесь
Согласно подсказке, установка завершена успешно. Здесь есть посылка, то есть сервер должен иметь доменное имя, а отечественное доменное имя нужно оформлять в соответствии с требованиями Минпроминформа, именно поэтому мне нужно ждать более полмесяца.
обратный прокси
После установки сертификата, если статическая страница развернута в nginx, в этот момент служба HTTPS успешно развернута. Но в большем количестве сценариев приложений, с одной стороны, мы предоставляем статические сервисы, такие как img, js, css и т. д., с другой стороны, нам также нужны REST-сервисы.
Но на данный момент, когда мы обращаемся к API службы Node.js через клиентские библиотеки HTTP, такие как axios или vue-resource, для получения данных, мы обнаруживаем, что браузер запрещает соединение. Причина в том, что после развертывания службы HTTPS весь сайт должен использовать HTTPS для передачи данных, включая получение ресурсов,GET/POST
запрос и тд.
Как решить? Я сделал несколько обходных путей здесь. В то время я думал, что поскольку это API для доступа к серверу Node.js, я знаю, что Node.js поддерживает сервисы HTTPS, поэтому я воспринял как должное использование его в Node.Openssl
Провести самоаттестацию. В интернете много подобных туториалов, но в браузере сертификат для самосертификации не распознается. Таким образом, этот метод осуществим, но не применяется к доступу других пользователей, и его невозможно применить к производственной среде. Порекомендуйте несколько инструментов здесь:
- Postman
- Firefox
Во-первых, вы можете отправлять смоделированные браузеры для отправки различных запросов, что очень удобно для тестирования API. Здесь рекомендуется второй, потому что я начал использовать Chrome, но сообщение об ошибке было расплывчатым, в то время как Firefox более прямолинеен в отношении сообщений об ошибках запроса/ответа в сети, что очень помогло мне в этом вопросе.
Именно то, что дает Firefox:xxxx 提供了不支持的自签名证书..
, я знаю, что самоподпись не будет работать, поэтому я подумал об этом на Nginx, думая, что у nginx есть функция обратного прокси, если вы скажете, сделайте api reverse proxy, и перейдите к порту службы узла, будет ли это полезно ? Итак, я нашел в Интернете учебник по обратному прокси Nginx.Операция выглядит следующим образом:
существует/ete/nginx/site-available/default
середина:
location /api {
proxy_pass http://localhost:8089;
proxy_buffering on;
}
Перезапустите nginx и перезапустите службу узла.
успех!
Таким образом, мы позволяем службе REST не беспокоиться о проблеме с сертификатом через обратный прокси-сервер, потому что Nginx уже выполнил эту часть работы.
Измените метод внешнего подключения
Эта часть необязательна, потому что я использовалvue-resource
, подключиться с помощьюthis.$http
Следовательно, HTTPS не может быть подключен.Чтобы решить эту проблему, вы можете:
- использоватьaxios, простое и элегантное обращение
наконец
Весь процесс довольно запутанный, потому что я не знаком с базовым протоколом SSL/TLS, а Nginx тоже новый. Но надо сказать, что Nginx настроен по-дружески, и понять, что это значит, можно с первого взгляда. Так что конфигурация не сложная.
Далее я углублюсь в эту часть и напишу серию.