| | 1 | [[wiki:Examples3u|Примеры настройки аппаратуры MC04-DSL-3U]] |
| | 2 | [[PageOutline(1-10, Содержание:)]] |
| | 3 | == 1. Короткая инструкция == |
| | 4 | |
| | 5 | |
| | 6 | |
| | 7 | Сертификат и ключ загружаются в веб-интерфейсе блока MC04-DSL-3U на вкладке '''Разное''' в пункте '''Сертификат'''. Сертификат должен быть выпущен с конкретным IP-адресом платы SW-01. |
| | 8 | Для получения сертификата и ключа обратитесь к администратору Вашей сети. |
| | 9 | Если вы хотите самостоятельно выпустить сертификат, то ниже представлена полная инструкция. |
| | 10 | |
| | 11 | == 2. Общая информация == |
| | 12 | |
| | 13 | HTTPS (Hypertext Transfer Protocol Secure) - защищённый вариант протокола HTTP. При работе по HTTPS данные между браузером и блоком MC04-DSL-3U передаются внутри TLS-соединения. TLS шифрует трафик, контролирует его целостность и позволяет браузеру проверить сертификат блока. |
| | 14 | |
| | 15 | В этой инструкции рассмотрена настройка HTTPS на плате SW-01 в составе блока MC04-DSL-3U. Сертификат выпускается только на IP-адрес платы SW-01. |
| | 16 | |
| | 17 | В инструкции описаны: |
| | 18 | * установка OpenSSL в Windows; |
| | 19 | * создание локального центра сертификации (УЦ); |
| | 20 | * создание закрытого ключа и сертификата платы SW-01; |
| | 21 | * проверка созданных файлов перед загрузкой; |
| | 22 | * загрузка сертификата и ключа через веб-интерфейс; |
| | 23 | * добавление корневого сертификата локального УЦ в доверенное хранилище Windows; |
| | 24 | * проверка HTTPS через браузер и OpenSSL; |
| | 25 | * удаление сертификата с платы. |
| | 26 | |
| | 27 | В примере используется следующая связка: |
| | 28 | * алгоритм закрытого ключа - ECDSA; |
| | 29 | * эллиптическая кривая - P-256 ({{{prime256v1}}}, также называется {{{secp256r1}}}); |
| | 30 | * формат закрытого ключа платы - незашифрованный PKCS#8 в формате PEM; |
| | 31 | * алгоритм подписи сертификата - ECDSA с SHA-256; |
| | 32 | * формат сертификата - X.509 v3 в формате PEM; |
| | 33 | * версия защищённого протокола - TLS 1.2 или TLS 1.3. |
| | 34 | |
| | 35 | {{{#!div class="wiki admonition note" |
| | 36 | '''Примечание.''' |
| | 37 | Алгоритм сертификата и алгоритм шифрования TLS-трафика - разные параметры. ECDSA используется для подтверждения подлинности платы и цифровой подписи. После установления соединения прикладные данные шифруются согласованным набором TLS, например AES-GCM или ChaCha20-Poly1305. |
| | 38 | }}} |
| | 39 | |
| | 40 | |
| | 41 | == 3. Подготовка == |
| | 42 | |
| | 43 | Для выполнения настройки потребуются: |
| | 44 | * компьютер с Windows; |
| | 45 | * доступ к веб-интерфейсу блока MC04-DSL-3U; |
| | 46 | * IP-адрес платы SW-01; |
| | 47 | * OpenSSL с интерфейсом командной строки; |
| | 48 | * возможность подключиться к плате по HTTP или SSH для восстановления доступа при ошибке; |
| | 49 | * права на добавление сертификата в хранилище текущего пользователя Windows. |
| | 50 | |
| | 51 | В командах этой инструкции используется IP-адрес {{{192.168.20.39}}}. Замените его на фактический IP-адрес вашей платы SW-01. |
| | 52 | |
| | 53 | {{{#!div class="wiki admonition warning" |
| | 54 | '''Внимание.''' |
| | 55 | До загрузки сертификата убедитесь, что у вас сохраняется альтернативный доступ к плате по HTTP или SSH. Ошибка в сертификате или закрытом ключе может привести к невозможности открыть веб-интерфейс по HTTPS. |
| | 56 | }}} |
| | 57 | |
| | 58 | |
| | 59 | {{{#!div class="wiki admonition warning" |
| | 60 | '''Внимание.''' |
| | 61 | Плата SW-01 не поддерживает зашифрованные закрытые ключи. Попытка загрузить ключ с заголовком {{{-----BEGIN ENCRYPTED PRIVATE KEY-----}}} приводит к перезагрузке платы. Используйте только незашифрованный ключ PKCS#8 в формате PEM с заголовком {{{-----BEGIN PRIVATE KEY-----}}}. |
| | 62 | }}} |
| | 63 | |
| | 64 | |
| | 65 | == 4. Установка OpenSSL == |
| | 66 | |
| | 67 | Для создания сертификата можно использовать любое программное обеспечение, способное создать сертификат X.509 и соответствующий ему закрытый ключ в требуемом формате. |
| | 68 | |
| | 69 | В настоящем примере используется OpenSSL для Windows в сборке Shining Light Productions. Установочный пакет можно скачать на странице [https://slproweb.com/products/Win32OpenSSL.html Win32/Win64 OpenSSL Installer for Windows], но вы можете использовать любую другую программу или сборку OpenSSL. При использовании другой программы команды могут отличаться, однако параметры создаваемого сертификата и ключа должны соответствовать требованиям этой инструкции. |
| | 70 | |
| | 71 | После установки откройте командную строку Windows. Для этого нажмите {{{Win-R}}}, введите {{{cmd}}} и нажмите Enter. |
| | 72 | |
| | 73 | Проверьте доступность OpenSSL командой: |
| | 74 | {{{openssl version}}} |
| | 75 | |
| | 76 | Команда {{{openssl}}} запускает программу OpenSSL, а подкоманда {{{version}}} выводит её версию. Приведённые далее команды рассчитаны на OpenSSL 3.5 и совместимы с OpenSSL 4.x. |
| | 77 | |
| | 78 | Если Windows выводит сообщение, что команда {{{openssl}}} не найдена, временно добавьте каталог программы в переменную {{{PATH}}} текущего окна CMD: |
| | 79 | {{{set "PATH=C:\Program Files\OpenSSL-Win64\bin;%PATH%"}}} |
| | 80 | |
| | 81 | Где: |
| | 82 | * {{{set}}} - задаёт переменную среды в текущем окне CMD; |
| | 83 | * {{{PATH}}} - список каталогов, в которых Windows ищет исполняемые файлы; |
| | 84 | * {{{C:\Program Files\OpenSSL-Win64\bin}}} - стандартный каталог {{{openssl.exe}}} для 64-разрядной сборки; |
| | 85 | * {{{%PATH%}}} - сохраняет остальные каталоги, которые уже содержались в {{{PATH}}}. |
| | 86 | |
| | 87 | Изменение действует только до закрытия текущего окна CMD. Если OpenSSL установлен в другом каталоге, укажите фактический путь к папке {{{bin}}}. |
| | 88 | |
| | 89 | Повторно выполните: |
| | 90 | {{{openssl version}}} |
| | 91 | |
| | 92 | [[Image(настройка HTTPS ред-01.png, align=center)]] |
| | 93 | == 5. Создание рабочего каталога == |
| | 94 | |
| | 95 | Создайте отдельный каталог для файлов УЦ (Удостоверяющий центр) и платы: |
| | 96 | {{{mkdir "%USERPROFILE%\equipment-certificates"}}} |
| | 97 | |
| | 98 | Где: |
| | 99 | * {{{mkdir}}} - создаёт каталог; |
| | 100 | * {{{%USERPROFILE%}}} - системная переменная с путём к профилю текущего пользователя Windows; |
| | 101 | * {{{equipment-certificates}}} - название рабочего каталога. |
| | 102 | |
| | 103 | Перейдите в созданный каталог: |
| | 104 | {{{cd /d "%USERPROFILE%\equipment-certificates"}}} |
| | 105 | |
| | 106 | Все последующие команды выполняйте в этом каталоге. |
| | 107 | [[Image(настройка HTTPS ред-02.png, align=center)]] |
| | 108 | == 6. Создание локального центра сертификации == |
| | 109 | |
| | 110 | Локальный центр сертификации нужен для того, чтобы браузер мог проверить сертификат SW-01 без обращения к публичному центру сертификации. Закрытый ключ УЦ хранится только на компьютере администратора и не загружается в плату. |
| | 111 | |
| | 112 | === 6.1. Создание закрытого ключа УЦ === |
| | 113 | |
| | 114 | {{{#!div class="wiki admonition warning" |
| | 115 | '''Внимание.''' |
| | 116 | Файлы {{{mc04-ca.key}}} и {{{sw01.key}}} являются закрытыми ключами. |
| | 117 | Любой человек, получивший закрытый ключ платы, сможет выдавать себя за эту плату. Компрометация ключа локального УЦ позволит выпускать сертификаты, которым будут доверять компьютеры с установленным корневым сертификатом этого УЦ. |
| | 118 | }}} |
| | 119 | |
| | 120 | |
| | 121 | Введите команду, которая создаёт защищённый паролем закрытый ключ локального центра сертификации на основе алгоритма ECDSA P‑256 и сохраняет его в файл {{{mc04-ca.key}}}: |
| | 122 | |
| | 123 | {{{openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:prime256v1 -pkeyopt ec_param_enc:named_curve -aes-256-cbc -out mc04-ca.key}}} |
| | 124 | |
| | 125 | OpenSSL запросит пароль для защиты ключа. Введите стойкий пароль и сохраните его в защищённом месте. При вводе пароля символы в CMD не отображаются - это нормальное поведение. |
| | 126 | |
| | 127 | Ключ УЦ защищается паролем, потому что он используется вручную при выпуске сертификатов. Ключ SW-01, напротив, должен загружаться сервером автоматически после включения платы, поэтому его нельзя защитить паролем. |
| | 128 | |
| | 129 | Проверьте первую строку ключа УЦ: |
| | 130 | {{{findstr /B /L /C:"-----BEGIN" mc04-ca.key}}} |
| | 131 | |
| | 132 | Ожидаемый результат: |
| | 133 | {{{ |
| | 134 | -----BEGIN ENCRYPTED PRIVATE KEY----- |
| | 135 | }}} |
| | 136 | |
| | 137 | '''Этот зашифрованный ключ предназначен только для локального УЦ и не загружается в SW-01.''' |
| | 138 | [[Image(настройка HTTPS ред-03.png, align=center)]] |
| | 139 | === 6.2. Создание корневого сертификата УЦ === |
| | 140 | |
| | 141 | Введите команду: |
| | 142 | {{{openssl req -new -x509 -key mc04-ca.key -out mc04-ca.crt -days 3650 -sha256 -subj "/CN=MC04-DSL-3U Local CA" -addext "basicConstraints=critical,CA:TRUE,pathlen:0" -addext "keyUsage=critical,keyCertSign,cRLSign" -addext "subjectKeyIdentifier=hash"}}} |
| | 143 | |
| | 144 | Введите пароль закрытого ключа УЦ (mc04-ca.key), который вы вводили на предыдущем шаге. |
| | 145 | |
| | 146 | Параметры команды: |
| | 147 | * {{{req}}} - работает с запросами на сертификат и позволяет создавать самоподписанные сертификаты; |
| | 148 | * {{{-new}}} - создаёт новый объект; |
| | 149 | * {{{-x509}}} - вместо запроса создаёт самоподписанный сертификат X.509; |
| | 150 | * {{{-key mc04-ca.key}}} - подписывает сертификат закрытым ключом УЦ; |
| | 151 | * {{{-out mc04-ca.crt}}} - сохраняет корневой сертификат в файл {{{mc04-ca.crt}}}; |
| | 152 | * {{{-days 3650}}} - задаёт срок действия 3650 дней, то есть приблизительно 10 лет; |
| | 153 | * {{{-sha256}}} - использует SHA-256 при формировании подписи; |
| | 154 | * {{{-subj}}} - задаёт имя субъекта без интерактивного опроса; |
| | 155 | * {{{/CN=MC04-DSL-3U Local CA}}} - присваивает УЦ понятное отображаемое имя; |
| | 156 | * {{{basicConstraints=critical,CA:TRUE}}} - отмечает сертификат как сертификат УЦ; |
| | 157 | * {{{pathlen:0}}} - запрещает создавать подчинённые УЦ; этот УЦ должен подписывать только конечные сертификаты оборудования; |
| | 158 | * {{{keyUsage=critical,keyCertSign,cRLSign}}} - разрешает ключу подписывать сертификаты и списки отзыва; |
| | 159 | * {{{subjectKeyIdentifier=hash}}} - добавляет идентификатор открытого ключа УЦ. |
| | 160 | |
| | 161 | Срок действия УЦ выбран больше срока действия сертификата платы, потому что сертификат платы должен оставаться проверяемым в течение всего своего срока. Истечение корневого сертификата потребует заменить корневой сертификат в Windows и перевыпустить сертификаты оборудования. |
| | 162 | |
| | 163 | Проверьте созданный сертификат: |
| | 164 | {{{openssl x509 -in mc04-ca.crt -noout -subject -issuer -dates -text}}} |
| | 165 | |
| | 166 | У самоподписанного корневого сертификата значения {{{subject}}} и {{{issuer}}} должны совпадать. |
| | 167 | [[Image(настройка HTTPS ред-04.png, align=center)]] |
| | 168 | == 7. Создание закрытого ключа SW-01 == |
| | 169 | |
| | 170 | Создайте ключ платы: |
| | 171 | {{{openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:prime256v1 -pkeyopt ec_param_enc:named_curve -out sw01.key}}} |
| | 172 | |
| | 173 | Команда создаёт закрытый ключ ECDSA P‑256 в незашифрованном формате PKCS#8 и сохраняет его в файл {{{sw01.key}}}. |
| | 174 | |
| | 175 | Проверьте заголовок ключа: |
| | 176 | {{{findstr /B /L /C:"-----BEGIN" sw01.key}}} |
| | 177 | |
| | 178 | Ожидаемый результат: |
| | 179 | {{{ |
| | 180 | -----BEGIN PRIVATE KEY----- |
| | 181 | }}} |
| | 182 | |
| | 183 | Дополнительно проверьте структуру ключа: |
| | 184 | {{{openssl pkey -in sw01.key -check -noout}}} |
| | 185 | |
| | 186 | Ожидаемый результат: |
| | 187 | {{{ |
| | 188 | Key is valid |
| | 189 | }}} |
| | 190 | |
| | 191 | Если OpenSSL запрашивает пароль, был создан зашифрованный ключ. Такой файл загружать в SW-01 нельзя. |
| | 192 | [[Image(настройка HTTPS ред-05.png, align=center)]] |
| | 193 | == 8. Создание запроса на сертификат SW-01 == |
| | 194 | |
| | 195 | Введите команду, заменив {{{192.168.20.39}}} на фактический IP-адрес платы: |
| | 196 | |
| | 197 | {{{openssl req -new -key sw01.key -out sw01.csr -sha256 -subj "/CN=192.168.20.39" -addext "subjectAltName=IP:192.168.20.39" -addext "basicConstraints=critical,CA:FALSE" -addext "keyUsage=critical,digitalSignature" -addext "extendedKeyUsage=serverAuth"}}} |
| | 198 | |
| | 199 | Параметры команды: |
| | 200 | * {{{req -new}}} - создаёт новый запрос на сертификат PKCS#10; |
| | 201 | * {{{-key sw01.key}}} - подписывает запрос закрытым ключом платы и помещает в запрос соответствующий открытый ключ; |
| | 202 | * {{{-out sw01.csr}}} - сохраняет запрос в файл {{{sw01.csr}}}; |
| | 203 | * {{{-sha256}}} - использует SHA-256 для подписи запроса; |
| | 204 | * {{{-subj "/CN=192.168.20.39"}}} - задаёт IP-адрес как отображаемое имя владельца сертификата; |
| | 205 | * {{{subjectAltName=IP:192.168.20.39}}} - добавляет IP-адрес в расширение SAN; |
| | 206 | * {{{basicConstraints=critical,CA:FALSE}}} - запрещает использовать сертификат платы как сертификат УЦ; |
| | 207 | * {{{keyUsage=critical,digitalSignature}}} - разрешает ключу создавать цифровые подписи; |
| | 208 | * {{{extendedKeyUsage=serverAuth}}} - указывает, что сертификат предназначен для TLS-сервера. |
| | 209 | |
| | 210 | Именно {{{subjectAltName}}}, а не {{{CN}}}, используется браузером для проверки IP-адреса. Значение должно быть записано с типом {{{IP}}}. |
| | 211 | |
| | 212 | Проверьте запрос: |
| | 213 | {{{openssl req -in sw01.csr -noout -verify -text}}} |
| | 214 | |
| | 215 | В выводе должны присутствовать IP-адрес платы и расширение {{{TLS Web Server Authentication}}} либо {{{serverAuth}}}. |
| | 216 | [[Image(настройка HTTPS ред-06.png, align=center)]] |
| | 217 | == 9. Выпуск сертификата SW-01 == |
| | 218 | |
| | 219 | Подпишите запрос локальным УЦ: |
| | 220 | {{{openssl x509 -req -in sw01.csr -CA mc04-ca.crt -CAkey mc04-ca.key -CAcreateserial -out sw01.crt -days 365 -sha256 -copy_extensions copy}}} |
| | 221 | |
| | 222 | Введите пароль закрытого ключа УЦ (mc04-ca.key). |
| | 223 | |
| | 224 | Параметры команды: |
| | 225 | * {{{x509 -req}}} - создаёт сертификат на основании запроса; |
| | 226 | * {{{-in sw01.csr}}} - указывает запрос платы; |
| | 227 | * {{{-CA mc04-ca.crt}}} - указывает сертификат выпускающего УЦ; |
| | 228 | * {{{-CAkey mc04-ca.key}}} - указывает закрытый ключ УЦ; |
| | 229 | * {{{-CAcreateserial}}} - создаёт файл с серийным номером сертификата, если он ещё не существует; |
| | 230 | * {{{-out sw01.crt}}} - сохраняет сертификат платы в файл {{{sw01.crt}}}; |
| | 231 | * {{{-days 365}}} - задаёт срок действия один год; |
| | 232 | * {{{-sha256}}} - использует SHA-256 при подписи сертификата; |
| | 233 | * {{{-copy_extensions copy}}} - переносит из запроса проверенные расширения, включая IP-адрес и назначение {{{serverAuth}}}. |
| | 234 | |
| | 235 | Годовой срок действия ограничивает период использования одного ключа и заставляет регулярно проверять возможность обновления сертификата. Новый сертификат следует выпустить и загрузить до истечения текущего. |
| | 236 | |
| | 237 | После выполнения команды в каталоге также появится файл серийного номера УЦ. Его следует хранить вместе с файлами УЦ, чтобы серийные номера последующих сертификатов не повторялись. |
| | 238 | [[Image(настройка HTTPS ред-07.png, align=center)]] |
| | 239 | == 10. Проверка сертификата и ключа == |
| | 240 | |
| | 241 | '''До загрузки в SW-01 выполните все проверки из этого раздела.''' |
| | 242 | |
| | 243 | === 10.1. Проверка цепочки доверия === |
| | 244 | |
| | 245 | {{{openssl verify -CAfile mc04-ca.crt sw01.crt}}} |
| | 246 | |
| | 247 | Где: |
| | 248 | * {{{verify}}} - проверяет сертификат; |
| | 249 | * {{{-CAfile mc04-ca.crt}}} - использует созданный корневой сертификат как доверенный; |
| | 250 | * {{{sw01.crt}}} - проверяемый сертификат платы. |
| | 251 | |
| | 252 | Ожидаемый результат: |
| | 253 | {{{ |
| | 254 | sw01.crt: OK |
| | 255 | }}} |
| | 256 | |
| | 257 | === 10.2. Проверка IP-адреса === |
| | 258 | |
| | 259 | {{{openssl x509 -in sw01.crt -noout -checkip 192.168.20.39}}} |
| | 260 | |
| | 261 | Параметр {{{-checkip}}} проверяет наличие указанного IP-адреса в {{{subjectAltName}}}. |
| | 262 | |
| | 263 | Ожидаемый результат: |
| | 264 | {{{ |
| | 265 | IP 192.168.20.39 does match certificate |
| | 266 | }}} |
| | 267 | |
| | 268 | === 10.3. Проверка срока и назначения === |
| | 269 | |
| | 270 | {{{openssl x509 -in sw01.crt -noout -subject -issuer -dates -ext subjectAltName,basicConstraints,keyUsage,extendedKeyUsage}}} |
| | 271 | |
| | 272 | Команда показывает владельца, издателя, срок действия и расширения сертификата. Проверьте следующие значения: |
| | 273 | * владельцем является IP-адрес платы; |
| | 274 | * издателем является {{{MC04-DSL-3U Local CA}}}; |
| | 275 | * IP-адрес присутствует как {{{IP Address}}}; |
| | 276 | * {{{CA:FALSE}}}; |
| | 277 | * {{{Digital Signature}}}; |
| | 278 | * {{{TLS Web Server Authentication}}}. |
| | 279 | |
| | 280 | === 10.4. Проверка соответствия ключа сертификату === |
| | 281 | |
| | 282 | Получите открытый ключ из закрытого ключа платы: |
| | 283 | |
| | 284 | {{{openssl pkey -in sw01.key -pubout -out sw01-key.pub}}} |
| | 285 | |
| | 286 | Где: |
| | 287 | * {{{pkey}}} - обрабатывает ключ; |
| | 288 | * {{{-pubout}}} - выводит только открытую часть; |
| | 289 | * {{{-out sw01-key.pub}}} - сохраняет её в отдельный файл. |
| | 290 | |
| | 291 | Получите открытый ключ из сертификата: |
| | 292 | |
| | 293 | {{{openssl x509 -in sw01.crt -pubkey -noout -out sw01-cert.pub}}} |
| | 294 | |
| | 295 | Где: |
| | 296 | * {{{-pubkey}}} - извлекает открытый ключ из сертификата; |
| | 297 | * {{{-noout}}} - не выводит сам сертификат; |
| | 298 | * {{{-out sw01-cert.pub}}} - сохраняет ключ в файл. |
| | 299 | |
| | 300 | Сравните файлы: |
| | 301 | |
| | 302 | {{{fc /b sw01-key.pub sw01-cert.pub}}} |
| | 303 | |
| | 304 | Где: |
| | 305 | * {{{fc}}} - стандартная команда Windows для сравнения файлов; |
| | 306 | * {{{/b}}} - выполняет побайтовое сравнение. |
| | 307 | |
| | 308 | Если ключ соответствует сертификату, CMD сообщит, что различия не найдены. |
| | 309 | [[Image(настройка HTTPS ред-08.png, align=center)]] |
| | 310 | == 11. Загрузка сертификата в SW-01 == |
| | 311 | |
| | 312 | Сертификат и ключ загружаются в веб-интерфейсе блока MC04-DSL-3U на вкладке '''Разное''' в пункте '''Сертификат'''. |
| | 313 | [[Image(настройка HTTPS ред-09.png, align=center)]] |
| | 314 | |
| | 315 | Откроется новое окно '''Информация о сертификате SSL''', в котором нужно нажать '''Загрузить новый сертификат'''. |
| | 316 | [[Image(настройка HTTPS ред-010.png, align=center)]] |
| | 317 | |
| | 318 | Появится окно '''Загрузка сертификатов SSL'''. |
| | 319 | [[Image(настройка HTTPS ред-011.png, align=center)]] |
| | 320 | |
| | 321 | Откройте файл {{{sw01.crt}}} в текстовом редакторе. Скопируйте его полностью, включая строки: |
| | 322 | |
| | 323 | {{{ |
| | 324 | -----BEGIN CERTIFICATE----- |
| | 325 | ... |
| | 326 | -----END CERTIFICATE----- |
| | 327 | }}} |
| | 328 | |
| | 329 | Вставьте содержимое в поле '''SSL сертификат платы (в формате PEM)'''. |
| | 330 | |
| | 331 | Откройте файл {{{sw01.key}}} и скопируйте его полностью, включая строки: |
| | 332 | |
| | 333 | {{{ |
| | 334 | -----BEGIN PRIVATE KEY----- |
| | 335 | ... |
| | 336 | -----END PRIVATE KEY----- |
| | 337 | }}} |
| | 338 | |
| | 339 | Вставьте содержимое в поле '''Ключ сертификата платы (в формате PEM)'''. |
| | 340 | |
| | 341 | Проверьте, что: |
| | 342 | * сертификат и ключ вставлены в соответствующие поля; |
| | 343 | * строки {{{BEGIN}}} и {{{END}}} скопированы полностью; |
| | 344 | * перед {{{BEGIN}}} нет дополнительного текста; |
| | 345 | * используется незашифрованный ключ с заголовком {{{BEGIN PRIVATE KEY}}}. |
| | 346 | |
| | 347 | {{{#!div class="wiki admonition warning" |
| | 348 | '''Внимание.''' |
| | 349 | После нажатия '''ОК''' сертификат и ключ немедленно загружаются в плату. Не нажимайте '''ОК''', пока не выполнены все проверки предыдущего раздела. |
| | 350 | }}} |
| | 351 | |
| | 352 | |
| | 353 | Нажмите '''ОК'''. |
| | 354 | |
| | 355 | После этого окно должно обновиться. В нем появится информация о добавленном сертификате. |
| | 356 | |
| | 357 | Также нажмите '''ОК'''. |
| | 358 | [[Image(настройка HTTPS ред-012.png, align=center)]] |
| | 359 | |
| | 360 | После применения настроек откройте: |
| | 361 | {{{https://192.168.20.39}}} |
| | 362 | |
| | 363 | Если корневой сертификат локального УЦ ещё не установлен в Windows, браузер покажет предупреждение о недоверенном издателе. Это не означает, что HTTPS не работает: соединение может быть зашифровано, но браузер пока не доверяет созданному УЦ. |
| | 364 | |
| | 365 | == 12. Установка корневого сертификата == |
| | 366 | |
| | 367 | Корневой сертификат можно добавить либо в доверенное хранилище Windows, либо в локальное хранилище отдельного браузера. В первом случае сертификату будут доверять приложения и браузеры, использующие системное хранилище Windows. Во втором случае доверие будет действовать только в том браузере и профиле, в которые импортирован сертификат, не затрагивая Windows, другие браузеры и приложения. Например, Mozilla Firefox позволяет импортировать корневой сертификат в собственное хранилище выбранного профиля. |
| | 368 | |
| | 369 | Перед установкой выведите SHA-256-отпечаток корневого сертификата: |
| | 370 | {{{openssl x509 -in mc04-ca.crt -noout -fingerprint -sha256}}} |
| | 371 | |
| | 372 | Где: |
| | 373 | * {{{-fingerprint}}} - выводит отпечаток сертификата; |
| | 374 | * {{{-sha256}}} - вычисляет отпечаток с помощью SHA-256. |
| | 375 | |
| | 376 | Отпечаток позволяет убедиться, что устанавливается именно созданный вами сертификат. Если файл передавался на другой компьютер, сравните отпечаток с исходным по независимому каналу. |
| | 377 | |
| | 378 | === 12.1. Установка корневого сертификата в хранилище Windows через CMD === |
| | 379 | |
| | 380 | Установите корневой сертификат в хранилище текущего пользователя: |
| | 381 | {{{certutil -user -addstore Root mc04-ca.crt}}} |
| | 382 | |
| | 383 | Где: |
| | 384 | * {{{certutil}}} - штатная утилита Windows для работы с сертификатами; |
| | 385 | * {{{-user}}} - выбирает хранилище текущего пользователя, а не всего компьютера; |
| | 386 | * {{{-addstore}}} - добавляет сертификат в хранилище; |
| | 387 | * {{{Root}}} - хранилище доверенных корневых центров сертификации; |
| | 388 | * {{{mc04-ca.crt}}} - добавляемый открытый сертификат УЦ. |
| | 389 | |
| | 390 | {{{#!div class="wiki admonition warning" |
| | 391 | '''Внимание.''' |
| | 392 | Установка корневого сертификата локального УЦ в доверенное хранилище Windows означает, что операционная система и использующие это хранилище приложения будут доверять всем сертификатам, подписанным данным УЦ. Если закрытый ключ УЦ будет скомпрометирован, злоумышленник сможет выпускать сертификаты, которым этот компьютер будет доверять. |
| | 393 | |
| | 394 | Используйте отдельный УЦ только для оборудования MC04-DSL-3U, защищайте его закрытый ключ паролем, не передавайте ключ на платы и устанавливайте корневой сертификат только на компьютеры, с которых выполняется администрирование оборудования. По возможности используйте хранилище текущего пользователя, а не хранилище всего компьютера. |
| | 395 | }}} |
| | 396 | |
| | 397 | |
| | 398 | В хранилище Windows устанавливается только файл {{{mc04-ca.crt}}}. Нельзя устанавливать или передавать файл {{{mc04-ca.key}}}. |
| | 399 | |
| | 400 | Если ключ УЦ утрачен или скомпрометирован: |
| | 401 | * создайте новый УЦ; |
| | 402 | * выпустите новые сертификаты для оборудования; |
| | 403 | * удалите старый корневой сертификат из доверенного хранилища Windows; |
| | 404 | * замените сертификаты на всех платах. |
| | 405 | |
| | 406 | Для просмотра сертификатов текущего пользователя выполните: |
| | 407 | |
| | 408 | {{{certmgr.msc}}} |
| | 409 | |
| | 410 | В открывшемся окне перейдите в '''Доверенные корневые центры сертификации -> Сертификаты'''. Здесь можно найти {{{MC04-DSL-3U Local CA}}}, проверить его отпечаток или удалить сертификат, когда доверие к данному УЦ больше не требуется. |
| | 411 | |
| | 412 | === 12.2. Установка корневого сертификата только в браузер === |
| | 413 | '''на примере Mozila Firefox''' |
| | 414 | |
| | 415 | Если сертификат должен использоваться только в браузер, его можно импортировать в собственное хранилище выбранного профиля браузера. В этом случае доверие к локальному УЦ не добавляется в Windows и не распространяется на другие браузеры и приложения. |
| | 416 | |
| | 417 | Приведем пример для браузера Firefox. |
| | 418 | |
| | 419 | Для установки сертификата: |
| | 420 | 1. Откройте Mozilla Firefox. |
| | 421 | 1. Откройте меню и выберите '''Настройки -> Приватность и защита'''. |
| | 422 | 1. Перейдите к разделу '''Сертификаты''' и нажмите '''Просмотр сертификатов'''. |
| | 423 | 1. В окне управления сертификатами откройте вкладку '''Центры сертификации'''. |
| | 424 | 1. Нажмите '''Импортировать''' и выберите файл {{{mc04-ca.crt}}}. |
| | 425 | 1. Разрешите доверять этому центру сертификации для идентификации веб-сайтов и подтвердите импорт. |
| | 426 | 1. Закройте и заново откройте Firefox, затем перейдите на {{{https://192.168.20.39}}}. |
| | 427 | |
| | 428 | {{{#!div class="wiki admonition warning" |
| | 429 | '''Внимание.''' |
| | 430 | Устанавливайте корневой сертификат {{{mc04-ca.crt}}}, а не сертификат платы {{{sw01.crt}}}. Не импортируйте в браузер или хранилище Windows закрытые ключи {{{mc04-ca.key}}} и {{{sw01.key}}}. |
| | 431 | }}} |
| | 432 | |
| | 433 | |
| | 434 | Официальное описание настройки локальных центров сертификации приведено в справке [https://support.mozilla.org/kb/setting-certificate-authorities-firefox Mozilla Firefox]. |
| | 435 | |
| | 436 | == 13. Проверка HTTPS == |
| | 437 | |
| | 438 | === 13.1. Проверка через браузер === |
| | 439 | |
| | 440 | Откройте: |
| | 441 | |
| | 442 | {{{https://192.168.20.39}}} |
| | 443 | |
| | 444 | Проверьте сертификат через сведения о защищённом соединении в браузере: |
| | 445 | * сертификат выдан для IP-адреса платы; |
| | 446 | * издателем является {{{MC04-DSL-3U Local CA}}}; |
| | 447 | * срок действия не истёк; |
| | 448 | * браузер не сообщает о несоответствии IP-адреса. |
| | 449 | |
| | 450 | === 13.2. Проверка TLS 1.3 === |
| | 451 | |
| | 452 | В CMD выполните: |
| | 453 | |
| | 454 | {{{echo. | openssl s_client -connect 192.168.20.39:443 -tls1_3 -brief}}} |
| | 455 | |
| | 456 | Параметры команды: |
| | 457 | * {{{echo.}}} - передаёт пустую строку и позволяет завершить {{{s_client}}} после проверки; |
| | 458 | * символ {{{|}}} передаёт вывод первой команды на вход второй; |
| | 459 | * {{{s_client}}} - запускает тестовый TLS-клиент OpenSSL; |
| | 460 | * {{{-connect 192.168.20.39:443}}} - подключается к HTTPS-порту платы; |
| | 461 | * {{{-tls1_3}}} - разрешает только TLS 1.3; |
| | 462 | * {{{-brief}}} - выводит сокращённую информацию о соединении. |
| | 463 | |
| | 464 | При успешной проверке вывод содержит: |
| | 465 | |
| | 466 | {{{ |
| | 467 | CONNECTION ESTABLISHED |
| | 468 | Protocol version: TLSv1.3 |
| | 469 | }}} |
| | 470 | |
| | 471 | Строка {{{Ciphersuite}}} показывает согласованный набор шифров. Строка {{{Signature type}}} показывает алгоритм подписи сертификата, а {{{Peer Temp Key}}} - алгоритм временного обмена ключами. |
| | 472 | |
| | 473 | Также можно проверить работу TLS 1.2 командой: |
| | 474 | {{{echo. | openssl s_client -connect 192.168.20.39:443 -tls1_2 -brief}}} |
| | 475 | |
| | 476 | Параметр {{{-tls1_2}}} принудительно выбирает TLS 1.2. Успешное соединение подтверждает возможность работы клиентов, которые ещё не используют TLS 1.3. |
| | 477 | == 14. Замена сертификата == |
| | 478 | |
| | 479 | До окончания срока действия создайте новый ключ и новый запрос, выпустите новый сертификат и повторите загрузку. Создание нового ключа предпочтительнее повторного использования старого: это ограничивает последствия возможной незамеченной компрометации предыдущего ключа. |
| | 480 | |
| | 481 | До нажатия '''ОК''' проверьте новую пару командами из раздела '''Проверка сертификата и ключа'''. Сохраните прежние рабочие файлы до успешной проверки нового HTTPS-соединения. |
| | 482 | |
| | 483 | == 15. Удаление SSL-сертификата == |
| | 484 | |
| | 485 | Подключитесь по SSH к плате SW-01. Данные по умолчанию: |
| | 486 | * логин - {{{root}}}; |
| | 487 | * пароль - {{{<пусто>}}}. |
| | 488 | |
| | 489 | Убедитесь, что файл сертификата существует: |
| | 490 | |
| | 491 | {{{ls -l /usr/share/sw/server.cer}}} |
| | 492 | |
| | 493 | Где: |
| | 494 | * {{{ls}}} - выводит сведения о файле; |
| | 495 | * {{{-l}}} - включает подробный формат с правами, владельцем, размером и временем изменения; |
| | 496 | * {{{/usr/share/sw/server.cer}}} - файл активного сертификата HTTPS. |
| | 497 | |
| | 498 | При необходимости создайте резервную копию сертификата: |
| | 499 | |
| | 500 | {{{cp /usr/share/sw/server.cer /usr/share/sw/server.cer.bak}}} |
| | 501 | |
| | 502 | Где: |
| | 503 | * {{{cp}}} - копирует файл; |
| | 504 | * первый путь - исходный сертификат; |
| | 505 | * второй путь - резервная копия. |
| | 506 | |
| | 507 | Удалите сертификат: |
| | 508 | |
| | 509 | {{{rm /usr/share/sw/server.cer}}} |
| | 510 | |
| | 511 | Где: |
| | 512 | * {{{rm}}} - безвозвратно удаляет указанный файл; |
| | 513 | * {{{/usr/share/sw/server.cer}}} - удаляемый сертификат HTTPS. |
| | 514 | |
| | 515 | Закрытый ключ {{{/usr/share/sw/server.key}}} этой командой не удаляется. |
| | 516 | |
| | 517 | Для применения изменений перезагрузите плату: |
| | 518 | |
| | 519 | {{{reboot}}} |
| | 520 | |
| | 521 | {{{#!div class="wiki admonition warning" |
| | 522 | '''Внимание.''' |
| | 523 | Во время перезагрузки соединения с платой, включая SSH и веб-интерфейс, будут разорваны. Перед выполнением {{{reboot}}} убедитесь, что временное прекращение управления оборудованием допустимо. |
| | 524 | }}} |
| | 525 | |
| | 526 | |
| | 527 | Для восстановления сертификата из созданной резервной копии подключитесь по SSH и выполните: |
| | 528 | |
| | 529 | {{{cp /usr/share/sw/server.cer.bak /usr/share/sw/server.cer}}} |
| | 530 | |
| | 531 | Затем снова перезагрузите плату: |
| | 532 | |
| | 533 | {{{reboot}}} |
| | 534 | |
| | 535 | == 16. Возможные ошибки == |
| | 536 | |
| | 537 | '''OpenSSL не найден''' |
| | 538 | Если CMD выводит сообщение {{{openssl is not recognized}}}, проверьте каталог установки и добавьте его папку {{{bin}}} в {{{PATH}}} текущего окна CMD. |
| | 539 | |
| | 540 | '''Ключ начинается с ENCRYPTED PRIVATE KEY''' |
| | 541 | Такой ключ защищён паролем и не поддерживается SW-01. Не загружайте его. Создайте новый незашифрованный ключ командой из раздела '''Создание закрытого ключа SW-01'''. |
| | 542 | |
| | 543 | {{{#!div class="wiki admonition danger" |
| | 544 | '''Опасность.''' |
| | 545 | Практически установлено, что попытка загрузки зашифрованного закрытого ключа приводит к перезагрузке SW-01. |
| | 546 | }}} |
| | 547 | |
| | 548 | |
| | 549 | '''Сертификат и ключ не соответствуют друг другу''' |
| | 550 | Повторите извлечение открытых ключей и сравнение через {{{fc /b}}}. Загружайте только ту пару, для которой различия не обнаружены. |
| | 551 | |
| | 552 | '''Браузер сообщает о несоответствии адреса''' |
| | 553 | Проверьте IP-адрес в {{{subjectAltName}}} командой {{{openssl x509 -checkip}}}. Подключайтесь к тому же IP-адресу, который указан в сертификате. |
| | 554 | |
| | 555 | '''Браузер не доверяет сертификату''' |
| | 556 | Убедитесь, что в хранилище текущего пользователя установлен именно {{{mc04-ca.crt}}}, а не сертификат платы. Проверьте SHA-256-отпечаток УЦ. Перезапустите браузер. |
| | 557 | |
| | 558 | '''HTTPS не открывается после загрузки''' |
| | 559 | Проверьте: |
| | 560 | * доступность платы по HTTP или SSH; |
| | 561 | * наличие строк {{{BEGIN}}} и {{{END}}}; |
| | 562 | * отсутствие парольной защиты ключа; |
| | 563 | * соответствие ключа сертификату; |
| | 564 | * доступность TCP-порта 443; |
| | 565 | * правильность IP-адреса. |
| | 566 | |
| | 567 | При необходимости повторно загрузите проверенные {{{sw01.crt}}} и {{{sw01.key}}} через HTTP. |
| | 568 | |
| | 569 | == 17. Результат настройки == |
| | 570 | |
| | 571 | После выполнения инструкции плата SW-01 доступна по HTTPS по своему IP-адресу. Для подтверждения подлинности используется сертификат ECDSA P-256, подписанный локальным УЦ, а закрытый ключ платы хранится в незашифрованном формате PKCS#8 PEM, который практически проверен на совместимость с SW-01. |
| | 572 | |
| | 573 | Установка корневого сертификата локального УЦ позволяет Windows и браузеру проверить сертификат платы без предупреждения о неизвестном издателе. Закрытый ключ УЦ при этом остаётся только у администратора и не передаётся в блок. Работа HTTPS проверяется для TLS 1.2 и TLS 1.3 с помощью OpenSSL и браузера. |
| | 574 | |
| | 575 | ---- |
| | 576 | [[wiki:Examples3u|Примеры настройки аппаратуры MC04-DSL-3U]] |