ColdFusionにCA証明書をインストールする
ColdFusionで接続先のWebサーバーやメールサーバー、LDAPサーバー(OpenLDAP、Active Directoryなど)が利用している証明書がプライベートCAから発行された証明書や自己証明書だと通信できないので、それを解決する方法です。
※この記事はColdFusion 2018をデフォルトの設定でインストールしている場合を前提としています。ColdFusion 2016でもパスを読み替えれば使えると思います。
ぱぱっと知りたい
ColdFusionはJVMで動作しているので、keytoolコマンドを利用してcacertsキーストアに証明書をインポートするJavaの方法がそのまま使えます。付属のJavaランタイム(JRE)にもkeytoolが同梱されています。
- JREは
C:\ColdFusion2018\jre
にあります。 - cacertsキーストアのパスワードは
changeit
がデフォルトです。
基本これだけ分かればあとはググればいろいろと出てきますが、私が良く利用しているWindows環境での方法をまとめてみました。
手順
1. 証明書を準備
インポートする証明書ファイルを用意します。
- サーバー自身が自己証明書を使用しているならその証明書ファイル
- サーバーがプライベートCAから発行されている証明書を利用しているなら、CAの証明書ファイル(サーバーの証明書ではない)
ファイル形式はDER(バイナリ形式)、PEM(BASE64形式)、P7B(PKCS #7形式)のどれでも出来るようですが、よく利用されているPEM形式で準備ます。
ファイル名は example-ca.cer
として保存した例ですすめます。
2. バッチ
運用するときやテスト等で毎回手打ちは手間がかかるのでWindowsバッチ化しておきます。
example-ca.cerを保存したフォルダと同じ場所に以下の内容をコピペした register-cert.bat
ファイルを作ります。
@echo off
setlocal
set JRE_HOME=C:\ColdFusion2018\jre
set CERT_FILE=%~dp0example-ca.cer
set CERT_ALIAS=example-ca
echo %CERT_FILE% を別名 %CERT_ALIAS% として登録中...
"%JRE_HOME%\bin\keytool.exe" -importcert -alias "%CERT_ALIAS%" -file "%CERT_FILE%" -keystore "%JRE_HOME%\lib\security\cacerts" -storepass changeit -noprompt
echo.
pause
不要になった時に削除用のバッチファイルも用意しておきます。
@echo off
setlocal
set JRE_HOME=C:\ColdFusion2018\jre
set CERT_ALIAS=example-ca
echo 別名 %CERT_ALIAS% を削除中...
"%JRE_HOME%\bin\keytool.exe" -delete -alias "%CERT_ALIAS%" -keystore "%JRE_HOME%\lib\security\cacerts" -storepass changeit -noprompt
echo.
pause
CERT_FILE
のexample-ca.cer部分がファイル名なので、適宜変えます。
CERT_ALIAS
の指定が証明書のエイリアス名として登録されます。削除時にこの名前を使います。
3. フォルダの内容
こんな感じになっていればOKです。
4. 登録する
register-cert.bat
をダブルクリックして実行します。
実行結果:
C:\cert-test\example-ca.cer を別名 example-ca として登録中...
警告: cacertsキーストアにアクセスするには-cacertsオプションを使用してください
証明書がキーストアに追加されました
続行するには何かキーを押してください . . .
「証明書がキーストアに追加されました」と表示されれば登録成功です。
ちなみに既に登録済みだと以下のように失敗します。
C:\cert-test\example-ca.cer を登録中...
警告: cacertsキーストアにアクセスするには-cacertsオプションを使用してください
keytoolエラー: java.lang.Exception: 証明書はインポートされませんでした。別名<example-ca>はすでに存在します
続行するには何かキーを押してください . . .
5. 削除する
remove-cert.bat
をダブルクリックして実行します。
実行結果:
別名 example-ca を削除中...
警告: cacertsキーストアにアクセスするには-cacertsオプションを使用してください
続行するには何かキーを押してください . . .
成功メッセージは出ないようです。未登録だと以下のように失敗します。
別名 example-ca を削除中...
警告: cacertsキーストアにアクセスするには-cacertsオプションを使用してください
keytoolエラー: java.lang.Exception: 別名<example-ca>は存在しません
続行するには何かキーを押してください . . .
補足
ColdFusion 2018のインストール時期によってJVMが「Java 8ベース」と「Java 11ベース」の2パターンあるようです。
今回の環境ではJava 11で、keytoolで-cacerts
オプションを使うよう警告がでていますが、追加・削除自体はできました。
-cacerts
オプションは -keystore
と排他となっていてcacertsファイルまでのパスを指定しなくても良くなったみたいです。ただ、Java 8ではこのオプションが無いので、複数の環境でバッチを流用させるなら記載したようにkeystoreでパス指定した方が現状では良いように思います。
Java 11で警告出さないようにするには
各バッチファイルの -keystore "%JRE_HOME%\lib\security\cacerts"
の部分を -cacerts
に書き換えるだけでOKでした。
参考文献
Author And Source
この問題について(ColdFusionにCA証明書をインストールする), 我々は、より多くの情報をここで見つけました https://qiita.com/bugtrap/items/5cb7de040ef53f29f4cb著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .