От автора: было очень непонятно, как работает закрепление публичных HTTP ключей. Это последнее, с чем хочется иметь дело в разгар крупной конференции. В сегодняшней статье я объясню вам, как сделать новый сертификат, который будет использовать ключ устаревшего SSL сертификата.
Возвращаемся к нормальной работе
Правда заключается в том, что не было безошибочного выхода из этой ситуации так, чтобы у всех пользователей все заработало. Однако ниже я расскажу вам про те шаги, которые помогли вернуть Smashing Magazine к нормальной работе.
1. Найдите оригинальный секретный ключ от устаревшего сертификата
Во-первых, их хостинг утверждал, что для копии, которая у них была, требуется пароль, о котором они и не знали. К счастью, ключ используется не просто для создания сертификата. Во время терминации TLS сервер запрашивает копию секретного ключа, а сам ключ на сервере очень редко запаролен, так как это требует постоянного ручного ввода пароля при любой перезагрузке сервера. Мы зашли на хостинг и нашли на сервере старый ключ. И теперь с ключом мы можем переходить к следующему шагу.
2. Добавьте старый ключ в новые заголовки закрепления публичных ключей
После запуска OpenSSL команды генерируется набор ключей, закодированных в Base64, после чего они закрепляются:
1 |
openssl rsa -in my-key-file.key -outform der -pubout | openssl dgst -sha256 -binary | openssl enc -base64 |
Далее я сказал администраторам Smashing Magazine обновить их заголовки:
1 2 3 4 5 6 |
Public-Key-Pins: pin-sha256="35L+K6PY5ynTu15SYPrT8KXp5TRH8kzP46mYLpv9k30="; pin-sha256="8RoC2kEF47SCVwX8Er+UBJ44pDfDZY6Ku5mm9bSXT3o="; pin-sha256="78j8kS82YGC1jbX4Qeavl9ps+ZCzb132wCvAY7AxTMw="; pin-sha256="GQGOWh/khWzFKzDO9wUVtRkHO7BJjPfzd0UVDhF+LxM="; max-age=86400; includeSubDomains |
Тут я внес две правки. Я изменил max-age с одного года на один день. Если max-age будет равняться одному году, то утеря секретных ключей, используемых для генерации сертификатов, моментально выведет ваш сайт из работы ровно на год. Плохая идея!
Второе изменение – включение набора ключей в старый сертификат. Нам пришлось это сделать, так как группа пользователей, заходившие на сайт после выхода новых сертификатов, но без закрепленных старых сертификатов получала бы одну и ту же SSL ошибку в случае, если Smashing Magazine захотели бы опять поменять сертификаты. Мы сделали это и дали пользователям пару часов, чтобы когда они снова зашли, им подтянулись старые наборы ключей.
3. Сгенерируйте новый сертификат из старого ключа
Предпоследний шаг – создание нового сертификата из старого ключа. Чтобы сгенерировать SSL сертификат, вам сначала необходимо сделать «запрос на сертификат». Вы же не захотите делиться своим секретным ключом с провайдером сертификатов, поэтому вы можете подписать запрос на сертификат следующим способом:
1 |
openssl req -new -sha256 -key my-key-file.key -out my-certificate-request.csr |
Во время генерации запроса на сертификат вам будут задавать различные вопросы. Самый главный – «Common Name» или имя сертификата, которое будет определять, для какого домена сертификат будет валидным. После получения CSR вы можете заказать сертификат у любого провайдера.
4.Измените сертификат
Имея новый сертификат, подписанный старым ключом, мы, наконец, смогли оживить его и заставить сайт работать для большинства пользователей. Тем, кому не повезло, могли зайти на сайт, когда на нем еще были закреплены новый сертификат и новый ключ. У людей просто не было доступа к Smashing Magazine, пока они не почистили кэш закрепленных ключей или не зашли через другой браузер.
Smashing Magazine потерял тысячи посетителей, и как только сайт поднялся, люди, стоявшие за этим, смогли вернуться на фантастическую конференцию в Барселоне.
Автор: Mathias Biilmann Christensen
Источник: //www.smashingmagazine.com/
Редакция: Команда webformyself.