BayServerをSSL化する方法

BayServerのSSL化

BayServerのSSL化は超簡単です。

とりあえず動作確認するだけであれば、あらかじめBayServerに入っているオレオレ証明書が使えますしw

ってか、デフォルトでSSLのポート開いてるのでそこにアクセスするだけですw

なので、このページでは、自分で証明書を作って、それをBayServerに組み込む方法について解説します。

SSL化の設定方法の基本

BayServer設計ファイルに以下のような記述があります

[port 2024]
    [secure]
        key  cert/oreore.key
        cert cert/oreore.crt

Portドッカー内にsecureドッカーを配置するとSSLモードでポートがオープンします。

(*)AJPドッカーやFCGIドッカーではsecureドッカーは動作しません

keyパラメータには鍵ファイル、certパラメータには証明書ファイルを指定します。

この他にも、鍵ストアを指定する方法もあります(後述)

オレオレ証明書の作成

BayServerに準備されているオレオレ証明書と同じものを自分で作成する方法を解説します。

オレオレ証明書ではなくちゃんとした証明書を作りたい人もいると思いますが(ってかそっちの方が大事かw)、真面目な話、オレオレ証明書が作れないとちゃんとした証明書も作れないので、とりあえず読んでください。

証明書の作成にはopensslコマンドが必要になるので、あらかじめインストールしておいてください。

鍵(Key)の作成

opensslコマンドを使用して鍵ファイル「oreore.key」を作ります

$ openssl genrsa -out oreore.key
Generating RSA private key, 2048 bit long modulus
........................+++
..........+++
e is 65537 (0x10001)

証明書(Certificate)の作成

opensslコマンドを使用して「oreore.csr」という証明書を作成します。

これは正確には「証明書署名要求(certificate signing request)」と呼ばれます。
まだ署名されてない証明書ということですかね。

証明書に含める組織名やメアドなどいろいろ聞かれますがとりあえず全部「Ore」で通しますw

$ openssl req -new -key oreore.key -out oreore.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:OR
State or Province Name (full name) []:Ore Ore
Locality Name (eg, city) [Default City]:Ore
Organization Name (eg, company) [Default Company Ltd]:Ore
Organizational Unit Name (eg, section) []:Ore
Common Name (eg, your name or your server's hostname) []:Ore
Email Address []:oreore@oreore.ore

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

署名(Sign)する

先程作成した証明書要求ファイルは、まだ証明書としては使用できません。

証明書要求ファイルは、認証局(CA)と呼ばれる機関に署名してもらい、本物であるということが証明された新しい証明書を発行してもらう必要があります。

勝手にAmazonを装った証明書は作れないってことですね。

認証局にはベリサインなどの大手の機関から、個人で立ち上げられるオレオレ認証局までさまざまなものがあります。

ただし、証明書がどの認証局によって発行されたかは重要です。大手機関の署名がある証明書は信頼できますし、オレオレ認証局の署名は信頼できません。(オレオレ認証局でも、信頼できる認証局に認証してもらうことで、信頼できる認証局にアップグレードすることはできます)

信頼できる認証局は基本的に有料で署名してくれますが、Let’s Enctyptなど無料で発行してもらえるところまでいろいろあります。

というわけで、こちらに、Let’s Encryptで署名してもらう方法について解説していますので合わせてご覧ください。

前置きが長くなりましたが、証明書を作成するには何でもいいから認証局による署名が必要で、簡単に済ませるならオレオレ認証局を立ち上げる必要があります。

う〜ん、ちょっとかったるいっすねw

ですが、ななななんと、opensslコマンドには自己署名の機能があるので、オレオレ認証局の立ち上げの必要さえないんです!(すげぇよopenssl!ありがとう!)

てことで、次のようにして署名し、「oreore.crt」という名の証明書を作成します。

$ openssl x509 -req -days 90 -in oreore.csr -signkey oreore.key -out oreore.crt
Signature ok
subject=/C=OR/ST=Ore Ore/L=Ore/O=Ore/OU=Ore/CN=Ore/emailAddress=oreore@oreore.ore
Getting Private key

自己署名のオレオレ感ハンパないw

ちなみに、opensslコマンドに渡した-daysというオプションは有効期間を指定するもので、ここでは有効期間を90日間としています。オレオレ証明書なので有効期間もクソもないですがw

この「oreore.crt」という「正真正銘のオレですよ!」っていうファイルは、形こそ証明書ですが、「オレ」が「オレ」だと証明しているだけなので、なんの証明にもなっていないのは注意してくださいw

BayServerに設定

先ほど生成した鍵と証明書をBayServerホームのcertディレクトリの中に放り込み、設計ファイルを次のように設定します(もともとそうなってるはず)

[port 2024]
    [secure]
        key  cert/oreore.key
        cert cert/oreore.crt

めっちゃ簡単ですね!

ブラウザからアクセス

http://localhost:2024にアクセスします。

オレオレ証明書なので警告が出ますが危険を承知で続行すればOK(URL違いスマソ)

https1.jpg

ブラウザの設定画面から証明書を確認して、オレオレ証明書が正しく機能していることを確認しましょう

https2.jpg

Oreだらけでワクワクしますね!

鍵ストアを使用したSSL設定

鍵ストアを用いると、複数の鍵や証明書を一つのファイルにまとめることができ、更にそれらをパスワードで管理が可能になります。

鍵ストアを使用する場合は、鍵と証明書から鍵ストアを作成します。サポートされている鍵ストアの形式は実装言語やプラットフォームによって異なります。

言語OSPKCS12JKS
JavaUnix系
Windows
RubyUnix系×
Windows××
PythonUnix系×
Windows×
PHPUnix系×
Windows×

上記のように、Ruby版、Python版、PHP版はWindowsで鍵ストアを使用することはできません。(インタプリタを自分でビルドするか、Cygwin版、MinGW版は使用できる可能性がありますが未確認です)

PKCS12鍵ストアを作成

以下のコマンドを入力し、PKCS12鍵ストア「oreore.p12」を作成します。
パスワードは「orepas」とします。

$ openssl pkcs12 -export -name orecert -in oreore.crt -inkey oreore.key -out oreore.p12
Enter Export Password:orepas
Verifying - Enter Export Password:orepas

JKS鍵ストアを作成

JKS(Java Key Store)はJavaプログラムで使用可能な鍵ストア形式です。

$ keytool -import -keystore oreore.jks -file oreore.key -alias key

ちな、PKCS12鍵ストアをJavaの鍵ストアに変換することもできます。
以下のコマンドを実行すると「oreore.p12」が「oreore.jks」に変換されます。

$ keytool -importkeystore -srckeystore oreore.p12 -destkeystore oreore.jks
キーストアoreore.p12をoreore.jksにインポートしています...
出力先キーストアのパスワードを入力してください:orepas
新規パスワードを再入力してください:orepas
ソース・キーストアのパスワードを入力してください:orepas
別名1のエントリのインポートに成功しました。
インポート・コマンドが完了しました: 1件のエントリのインポートが成功しました。0件のエントリのインポートが失敗したか取り消されました

鍵ストアはどこにあってもよいですが、ここではBayServerホームのcertディレクトリにコピーしておきます。

BayServerの設定

設計ファイルに以下の設定を追加します。
secureにtrueを指定するのと、keyStoreに鍵ストアのパス、keyStorePassにパスワードを記述するだけです。

[port 2024]
    [secure]
        keyStore  cert/oreore.p12
        keyStorePass orepas

(参考)ファイアウォールの設定

CentOSやRedHatなどのLinux OSで、ファイアウォールが有効になっている場合、外部のホストからアクセスができません。次のように、firewall-cmdを使用してSSLのポートを使用可能にする必要があります。

$ sudo firewall-cmd --add-port 2024/tcp
$ sudo firewall-cmd --add-port 2024/tcp --permanent

ただ、サイトを公開する際は、Well Known Portである443番ポートを開きたいですね。
その場合は以下のようにして443番ポートを2024番ポートにリダイレクトするようにすると便利です。

$ sudo  firewall-cmd --add-forward-port=port=443:proto=tcp:toport=2024
success
$ sudo  firewall-cmd --add-forward-port=port=443:proto=tcp:toport=2024 --permanent
success

Twitterでフォローしよう

おすすめの記事