Работаю в сетевом отеле, с момента открытия Opera PMS крутилась на самоподписанном сертификате. Бренд на прошлой неделе потребовал заменить на нормальный публичный сертификат от авторизованного центра сертификации с формулировкой "...provider is a company such as, Network Solutions, DigiCert, GoDaddy or a similar public authority, then the SSL certificate is considered public. "
Сразу скажу, что сертификат вовремя не заменил по ряду причин и опера перестала работать: нельзя создавать брони, не работает lookup и всё что связано с запросами к бренду.
Предистория
Подрядчик по сопровождению продуктов Oracle в РФ вовремя помочь не смог (все мы знаем о ком речь), пришлось искать самостоятельно. Нашёл пост на реддите, но его затёрли. Причём автор написал что Оракл в США берёт за это $150/час.
В итоге пост восстановил с помощью WebArchive и скомпилировал из поста и комментов правильный порядок действий. Мне это стоило двух полных дней кропотливых тестов и чтения документации.
Подготовка
Теперь к решению проблемы: сначала необходимо провести подготовительные процедуры и сформировать файл запроса сертификата.
Прежде всего вам потребуется пароль от WebLogic - это админский пароль для управления централизованной системой развёртывания JAVA-приложений, коим и является опера.
На сервере Opera PMS в консоли cmd выполняем команды, предварительно изменив поля:
CN=FQDN имя сервера оперы
O= (Наименование компании)
C=(страна)
ST=(штат/область)
L=(город)
[WEBLOGIC pass] = пароль Weblogic. Его можете узнать у компании установщика.
%JAVA_HOME%\bin\keytool.exe -genkey -keyalg RSA -dname "CN=opera.ru, O=Hotel, C=RU, ST=MSK, L=Moscow" -alias V5MACHINE -keypass [WEBLOGIC pass] -keystore D:\micros\opera\security\new\V5MACHINE.jks -storepass [WEBLOGIC pass] -validity 1461 -keysize 2048
Сформируется файл D:\micros\opera\security\new\V5MACHINE.jks - там сохранён приватный ключ в хранилище для JAVA-приложений. Теперь на основе него сформируем файл запроса сертификата:
%JAVA_HOME%\bin\keytool.exe -certreq -v -alias V5MACHINE -file D:\micros\opera\security\new\V5MACHINE.csr -keypass [WEBLOGIC pass] -storepass [WEBLOGIC pass] -keystore D:\micros\opera\security\new\V5MACHINE.jks
В результате сформируется файл запроса сертификата D:\micros\opera\security\new\V5MACHINE.csr. Его необходимо передать в CA для выпуска сертификата. Я обращался в Timeweb - очень отзывчивая техподдержка, для понимания: сделали мне сертификат в воскресенье в 23:30 хотя указано время работы с 9 до 18. Сертификат по цене 2000 ₽, выпустили AlphaSSL от GlobalSign. Запросите сразу промежуточный и корневой сертификаты.
После оплаты и выпуска сертификата мне прислали три сертификата: конечный, промежуточный и корневой.
Замена сертификатов
Я проводил замену сертификата на горячую, предупредив пользователей только перед перезапуском служб.
Сделайте бэкап папок:
D:\ORA\JDK\jre\lib\security
D:\MICROS\opera\security
D:\MICROS\wallets
Удалите всё в папках D:\MICROS\opera\security и D:\MICROS\wallets - их пересоздадим.
Для начала сохраните сертификаты, создайте текстовые документы для каждого с расширением .crt и вставьте внутрь текст начиная с "-----BEGIN CERTIFICATE-----" и заканчивая "-----END CERTIFICATE-----".
Получится три файла: opera5.crt (конечный серт), roota.crt (промежуточный серт) и rootmain.crt (корневой сертификат).
Далее необходимо перевести сертификаты в формат .cer, для этого открываем сертификат и на вкладке Details:
Далее указать имя файла и сохранить.
Открываем сертификат opera5.cer и выделяем цепочку сертификатов :
Получите файл формата .p7b (у меня это leaf.p7b), всё это копируем на сервер в папку D:\MICROS\OPERA\security
Импорт сертификатов в хранилище
Промежуточный сертификат:
%java_home%\jre\bin\keytool -importcert -file D:\micros\opera\security\roota.cer -alias roota -keystore D:\micros\opera\security\V5MACHINE.jks -storepass [WEBLOGIC pass] -storetype JKS -noprompt
Корневой сертификат:
%java_home%\jre\bin\keytool -importcert -file D:\micros\opera\security\rootmain.cer -alias rootb -keystore D:\micros\opera\security\V5MACHINE.jks -storepass [WEBLOGIC pass] -storetype JKS -noprompt
Цепочка сертификатов:
%java_home%\jre\bin\keytool -importcert -alias v5machine -file D:\micros\opera\security\leaf.p7b -keystore D:\micros\opera\security\V5MACHINE.jks -storepass [WEBLOGIC pass] -storetype JKS -noprompt
Пересоздаём wallet
D:\ora\mwfr\oracle_common\bin\orapki.BAT wallet create -wallet D:\micros\wallets -pwd [WEBLOGIC pass] -auto_login
И импортируем в него ключи из сформированного хранилища
D:\ora\mwfr\oracle_common\bin\orapki.BAT wallet jks_to_pkcs12 -wallet D:\MICROS\wallets -pwd [WEBLOGIC pass] -keystore D:\MICROS\OPERA\security/V5MACHINE.jks -jkspwd [WEBLOGIC pass]
Обновляем cacerts
Удаляем старый сертификат иначе не даст добавить новый
D:\ora\JDK\jre\bin\keytool.exe -delete -keystore D:\ora\JDK\jre\lib\security\cacerts -alias v5machine -storepass [WEBLOGIC pass] -noprompt
Добавляем новый
%java_home%\jre\bin\keytool -importcert -file D:\micros\opera\security\opera5.crt -alias V5MACHINE -keystore cacerts -storepass [WEBLOGIC pass] -storetype JKS -noprompt
Можно предупредить ресепшн, что опера отвалится на 15 мин и рестартануть службы через Weblogic, если умеете. Или просто ребутнуть сервер.
После запуска всех служб Opera PMS должна начать открываться уже с новым сертификатом.