Исходный код вики Настройка https для PERCo-Web
Редактировал(а) PROSTO:СКУД 2026/10/30 12:30
Скрыть последних авторов
| author | version | line-number | content |
|---|---|---|---|
| |
6.1 | 1 | {{box title="**Быстрый переход по пунктам инструкции**"}} |
| 2 | {{toc start="1" depth="2" numbered="false"/}} | ||
| 3 | {{/box}} | ||
| |
5.1 | 4 | |
| |
2.1 | 5 | Инструкция предназначена для администратора PERCo-Web и сервера 1С. В примерах используется адрес ##192.168.12.22##. Замените его на адрес своего сервера PERCo-Web. |
| |
1.1 | 6 | |
| |
2.1 | 7 | == 1. Подготовка == |
| |
1.1 | 8 | |
| |
2.1 | 9 | Адрес в настройках подключения 1С должен совпадать с адресом в сертификате PERCo-Web: |
| |
1.1 | 10 | |
| |
2.1 | 11 | * При подключении по IP сертификат должен содержать этот IP в поле Subject Alternative Name (SAN) как ##IP Address##. |
| 12 | * При подключении по имени сертификат должен содержать это имя в SAN как ##DNS Name##. | ||
| |
1.1 | 13 | |
| |
2.1 | 14 | Если подходящий сертификат и закрытый ключ уже имеются в файлах ##.crt## и ##.key##, переходите к разделу 3. |
| |
1.1 | 15 | |
| |
2.1 | 16 | Для создания собственного сертификата потребуется OpenSSL. Команды ниже выполняются в PowerShell на Windows. Запускайте их по порядку, каждую строку отдельно. |
| |
1.1 | 17 | |
| |
2.1 | 18 | == 2. Создание сертификата с помощью OpenSSL == |
| |
1.1 | 19 | |
| |
2.1 | 20 | Укажите IP сервера PERCo-Web и создайте папку для файлов: |
| |
1.1 | 21 | |
| |
2.1 | 22 | {{code language="powershell"}} |
| |
1.1 | 23 | $PercoIP = "192.168.12.22" |
| 24 | $CertDir = Join-Path $env:USERPROFILE ("perco-tls-" + (Get-Date -Format "yyyyMMdd-HHmmss")) | ||
| 25 | New-Item -ItemType Directory -Path $CertDir | ||
| 26 | Set-Location -LiteralPath $CertDir | ||
| |
2.1 | 27 | {{/code}} |
| |
1.1 | 28 | |
| |
2.1 | 29 | Создайте внутренний удостоверяющий центр (УЦ). OpenSSL предложит задать пароль для закрытого ключа ##ca.key##. Сохраните этот пароль. |
| |
1.1 | 30 | |
| |
2.1 | 31 | {{code language="powershell"}} |
| |
1.1 | 32 | Set-Content -Path .\ca.cnf -Encoding ascii -Value @('[req]','distinguished_name = dn','x509_extensions = v3_ca','[dn]','CN = PERCo Internal Root CA','[v3_ca]','basicConstraints = critical,CA:TRUE,pathlen:0','keyUsage = critical,keyCertSign,cRLSign','subjectKeyIdentifier = hash') |
| 33 | openssl req -x509 -newkey rsa:3072 -sha256 -days 3650 -keyout ca.key -out ca.crt -config ca.cnf -extensions v3_ca -subj "/CN=PERCo Internal Root CA" | ||
| |
2.1 | 34 | {{/code}} |
| |
1.1 | 35 | |
| |
2.1 | 36 | Создайте ключ и запрос на сертификат PERCo-Web: |
| |
1.1 | 37 | |
| |
2.1 | 38 | {{code language="powershell"}} |
| |
1.1 | 39 | openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:3072 -out perco.key |
| 40 | openssl req -new -sha256 -key perco.key -out perco.csr -subj "/CN=$PercoIP" | ||
| |
2.1 | 41 | {{/code}} |
| |
1.1 | 42 | |
| |
2.1 | 43 | Добавьте IP-адрес в SAN и подпишите сертификат. OpenSSL запросит пароль от ##ca.key##. |
| |
1.1 | 44 | |
| |
2.1 | 45 | {{code language="powershell"}} |
| |
1.1 | 46 | Set-Content -Path .\server.ext -Encoding ascii -Value @('[v3_server]','basicConstraints = critical,CA:FALSE','keyUsage = critical,digitalSignature,keyEncipherment','extendedKeyUsage = serverAuth',"subjectAltName = IP:$PercoIP",'subjectKeyIdentifier = hash','authorityKeyIdentifier = keyid,issuer') |
| 47 | openssl x509 -req -in perco.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out perco.crt -days 397 -sha256 -extfile server.ext -extensions v3_server | ||
| |
2.1 | 48 | {{/code}} |
| |
1.1 | 49 | |
| |
2.1 | 50 | Проверьте выпущенный сертификат: |
| |
1.1 | 51 | |
| |
2.1 | 52 | {{code language="powershell"}} |
| |
1.1 | 53 | openssl verify -CAfile ca.crt -purpose sslserver -verify_ip $PercoIP perco.crt |
| |
2.1 | 54 | openssl x509 -in perco.crt -noout -ext subjectAltName -fingerprint -sha256 |
| 55 | {{/code}} | ||
| |
1.1 | 56 | |
| |
2.1 | 57 | Первая команда должна вывести ##perco.crt: OK##, вторая — нужный ##IP Address##. |
| |
1.1 | 58 | |
| |
2.1 | 59 | |=Файл|=Назначение |
| 60 | |##perco.crt##|Сертификат сервера PERCo-Web | ||
| 61 | |##perco.key##|Закрытый ключ сервера PERCo-Web | ||
| 62 | |##ca.crt##|Сертификат внутреннего УЦ для доверия на сервере 1С | ||
| 63 | |##ca.key##|Закрытый ключ внутреннего УЦ; хранить отдельно, не загружать в PERCo-Web или на сервер 1С | ||
| |
1.1 | 64 | |
| |
2.1 | 65 | == 3. Установка сертификата в PERCo-Web == |
| |
1.1 | 66 | |
| |
2.1 | 67 | Откройте **Менеджер PERCo-Web → Настройки → HTTPS и сертификаты**. |
| |
1.1 | 68 | |
| |
2.1 | 69 | 1. В поле сертификата выберите ##perco.crt##. |
| 70 | 1. В поле ключа выберите соответствующий ##perco.key##. | ||
| 71 | 1. Нажмите **Сохранить** и включите **HTTPS**. | ||
| 72 | 1. Проверьте назначенный порт HTTPS — обычно ##443##. | ||
| 73 | 1. На вкладке **Мониторинг** перезапустите **Web-сервер** PERCo-Web. | ||
| |
1.1 | 74 | |
| |
3.1 | 75 | **Важно:** после загрузки новых файлов если ранее уже были настроен доступ через 443 порт, сервер может продолжать выдавать прежний сертификат до перезапуска. Чтобы это исправить, перезагрузите сервер PERCo-Web в согласованное время. |
| |
1.1 | 76 | |
| |
2.1 | 77 | [[Описание настроек HTTPS в документации PERCo-Web>>https://ru.percoweb.com/help/server_db.htm]] |
| |
1.1 | 78 | |
| |
2.1 | 79 | == 4. Настройка доверия на сервере 1С == |
| |
1.1 | 80 | |
| |
3.1 | 81 | При использовании внутреннего УЦ скопируйте ##ca.crt## на компьютер, где выполняется обмен с 1С. Для клиент-серверной базы это сервер 1С. Если обмен может выполняться на нескольких узлах кластера, установите сертификат УЦ на каждом таком узле. |
| |
1.1 | 82 | |
| |
2.1 | 83 | Запустите PowerShell **от имени администратора** и замените путь на фактический: |
| |
1.1 | 84 | |
| |
2.1 | 85 | {{code language="powershell"}} |
| |
1.1 | 86 | Import-Certificate -FilePath "C:\путь\к\ca.crt" -CertStoreLocation Cert:\LocalMachine\Root |
| |
2.1 | 87 | {{/code}} |
| |
1.1 | 88 | |
| |
2.1 | 89 | Для просмотра установленных сертификатов нажмите **Win + R**, введите ##certlm.msc## и откройте **Доверенные корневые центры сертификации → Сертификаты**. Там должен находиться сертификат ##PERCo Internal Root CA##. |
| |
1.1 | 90 | |
| |
2.1 | 91 | Если сертификат PERCo-Web выпущен УЦ, которому сервер 1С уже доверяет, отдельный импорт не требуется. |
| |
1.1 | 92 | |
| |
2.1 | 93 | == 5. Проверка действующего HTTPS-сертификата == |
| |
1.1 | 94 | |
| |
2.1 | 95 | Сначала посмотрите отпечаток созданного файла: |
| |
1.1 | 96 | |
| |
2.1 | 97 | {{code language="powershell"}} |
| 98 | openssl x509 -in .\perco.crt -noout -fingerprint -sha256 -ext subjectAltName | ||
| 99 | {{/code}} | ||
| |
1.1 | 100 | |
| |
2.1 | 101 | Затем проверьте сертификат, который **реально выдаёт порт 443**. Укажите фактический IP PERCo-Web: |
| |
1.1 | 102 | |
| |
2.1 | 103 | {{code language="powershell"}} |
| 104 | '' | openssl s_client -connect 192.168.12.22:443 -noservername -showcerts 2>$null | openssl x509 -noout -fingerprint -sha256 -ext subjectAltName | ||
| 105 | {{/code}} | ||
| |
1.1 | 106 | |
| |
2.1 | 107 | Отпечатки должны совпасть. Если они разные, PERCo-Web продолжает выдавать старый сертификат либо на порту 443 отвечает другой HTTPS-сервис. |
| |
1.1 | 108 | |
| |
2.1 | 109 | На сервере 1С проверьте подключение без отключения проверки сертификата: |
| |
1.1 | 110 | |
| |
2.1 | 111 | {{code language="powershell"}} |
| 112 | curl.exe -v --noproxy "*" https://192.168.12.22:443/api/system/auth | ||
| 113 | {{/code}} | ||
| |
1.1 | 114 | |
| |
2.1 | 115 | Ответ HTTP ##401## или ##405## для этой проверки допустим: команда отправляет GET-запрос, а цель проверки — убедиться, что HTTPS-соединение установлено и сертификат принят. |
| 116 | |||
| 117 | После этого в настройках интеграции 1С укажите тот же адрес, порт ##443##, включите защищённое соединение и повторите подключение к PERCo-Web. | ||
| 118 | |||
| 119 | == 6. Возможные ошибки == | ||
| 120 | |||
| 121 | |=Сообщение|=Что проверить | ||
| 122 | |##SEC_E_WRONG_PRINCIPAL##, «Главное конечное имя неверно»|Адрес отсутствует в SAN или порт 443 выдаёт прежний сертификат | ||
| 123 | |«Удаленный узел не прошел проверку»|Доверие к УЦ, срок и цепочку сертификата, проверку отзыва, настройки прокси | ||
| 124 | |HTTP ##401##|Учётные данные PERCo-Web | ||
| 125 | |HTTP ##405## при тесте через ##curl.exe##|Для ресурса требуется POST; HTTPS-соединение уже прошло проверку | ||
| 126 | |||
| |
3.1 | 127 | **Хранение ключей:** файл ##perco.key## нужен Web-серверу PERCo-Web. Файл ##ca.key## храните отдельно в защищённом месте. |