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