Самопідписаний SSL сертифікат в Railo
Сергій Галашин - 09/01/2010
Нещодавно зіткнувся з доволі відомою проблемою для CFML-розробників: CFHTTP відмовляється працювати з HTTPS-сайтом якщо сертифікат є само-підписаним, або не засвідченим авторизованим центром. Більше того, у мене сертифікат був у порядку, оглядачі чудово його сприймали, але не Railo.
Стандартним рішенням є додавання відкритої частини сертифікату до сховища ключів (keystore) JVM, котру використовує ColdFusion/Railo.
Але ця процедура може виявитися доволі хитрою, коли мова йде про Railo.
Спочатку я спробував піти "правильним" шляхом, та скористатися вбудованими функціями якраз для цього діла:
SSLCertificateList("hostname") чудово показала мені список сертифікатів (а він там був один) потрібного сайту.
SSLCertificateInstall("hostname") без жодних претензій його встановила.
Але ж дулі! Все одно продовжив бачити помилку sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Тоді я взявся за консоль. Спочатку я перевірив чи спрацювали функції:
$ cd ~/webapps/xxxxx/WEB-INF/railo/security/
$ keytool -list -keystore cacerts
Потрібний сертифікат був у списку. Підказка: за умовчанням пароль для keytool є "changeit" (без лапок, звісно).
Про всяк випадок я спробував перевстановити його вручну. Для цього експортував .crt файл сертифікату сайту за допомогою оглядача (Firefox, в моєму випадку) та замінив запис:
$ keytool -delete -alias myalias -keystore cacerts
$ keytool -import -alias myalias -keystore cacerts -file /home/zzz/xxxxx.crt
$ keytool -list -keystore cacerts
Після цього перезапустив Railo та... не отримав нічого.
Наступна спроба зареєструвати сертифікат аналогічним способом була пов’язана з JVM, для Ubuntu та JVM від Sun шлях до них виглядає десь так:
/usr/lib/jvm/java-6-sun/jre/lib/security/
Вона теж виявилася невдалою, хоча для Adobe ColdFusion цей спосіб зазвичай працює.
Насамкінець я згадав, що Railo має ще кореневий контекст, в моєму випадку це тека
/opt/railo/webapps/ROOT/WEB-INF/railo/security/
Повторивши імпорт ще тут та перезапустивши Railo все запрацювало!