OpenSSLでLAN内サーバーにSSL証明書作成
OpenSSLは、暗号化や復号化、デジタル署名、公開鍵証明書の生成や検証、ランダムなデータ生成など、さまざまな暗号技術を提供する。これにより、Webサーバーとクライアント間の通信など、セキュアな通信を実現することができる。また、世界中の多くのWebサーバーで使用されており、多くのアプリケーションやデバイスで使用されることもある。
OpenSSLは、オープンソースソフトウエアで無料で使用でき、多くの開発者によってメンテナンスされている。
LAN内であっても第三者による不正な盗聴や改ざん、なりすましを防止するために、通信内容を暗号化することで、プライベート内容やパスワードなどの個人情報を保護することができる。
このページでは、Windows上のApacheやNginxのWebサーバーに、OpenSSLでLAN内のサーバーにSSL証明書を作成する手順を、分かりやすく画像を用いながら記すことにする。
------[ 目 次 ]------
・ OpenSSL証明書の類似記事 ➡ OpenSSLの証明書を警告が出ないように作成
【留意事項】
OpenSSLのバージョンおよびアップデート状況などにより、表示画面および機能または編集手順などが若干異なる場合がある。
最初に、Windows用のOpenSSLのインストーラーをダウンロードする。OpenSSL公式サイトでは、ソースファイルのみが配布されているため、そこからWindows用にビルドするのはきわめてハードルが高い。そのため、以下の「Shining Light Productons」で、ご親切にビルドされたインストーラーが配布されているため、これを拝借することにする。
以下のOpenSSLダウンロードサイトで、ご自分のパソコンのスペックに合わせてLightまたは開発版で、なるべく新しいバージョンのEXEまたはMSI版をダウンロードする。
・ OpenSSLダウンロード ➡ Shining Light Productons
私の場合は軽いLightの実行ファイルであるEXE版をダウンロードした。SSL証明書だけに使用するのであれば、軽いLight版で十分である。また、Shining Light ProductionsのWebサイトからダウンロードしたOpenSSLは、既にビルド済みのためそのままでインストールできる。
▶ 手順 1
ダウンロードしたインストーラーを起動すると、以下のWindows Defenderによるセキュリティ機能が働くため[詳細情報]をクリックする。
▶ 手順 2
[実行]をクリックする。
▶ 手順 3
デジタル署名されていないため、以下のユーザーアカウント制御が表示される。[はい]をクリックする。
▶ 手順 4
やっとセットアップのダイアログメニューが出る。
❶ [I accept the agreement]のラジオボタンをクリックして選択する。
❷ [Next]ボタンをクリックする。
▶ 手順 5
インストール先を変更できるが、このままで[Next]ボタンをクリックする。
▶ 手順 6
以下は、OpenSSLコマンドにパスが通った状態で使えるコンソール(サービス)を起動できるため、このままで[Next]ボタンをクリックする。
▶ 手順 7
DLLファイルをコピーするディレクトリを指定する。
❶ [The Windows system directory]のラジオボタンをクリックして選択する。
❷ [Next]ボタンをクリックする。
▶ 手順 8
Ready to Installのダイアログでは、デフォルトで[Install]ボタンをクリックする。
▶ 手順 9
Setup Wizardダイアログでは寄付関連選択するが、私の場合は以下を選択した。使用してみてから考える場合はすべてのチェックをOFFにする。
❶ 私の場合は[One-time $10 donation to Windows OPenSSL]を選択したが、各々で判断すること。
❷ [Finish]ボタンをクリックする。
以上でOpenSSLのインストールは完了したため次へ進む。
OpenSSLはCUI上でコマンドを実行するが、実行のたびにC:\Program Files\OpenSSL-Win64\binのパスを入力して、コマンドを入力しなければならないため手間がかかる。そこで、Windowsの環境変数に事前にパスを通して記憶させておくことで、パスを入力しなくても実行できるようになる。その手順を以下に記す。
システムのプロパティを開くため[Windows+R]キーを押してファイルを指定して実行ダイアログを開き、名前のフォーム内に[SystemPropertiesAdvanced]コマンドを入力して[OK]ボタンを押す。または[Enter]キーを押す。
▶ 手順 1
❶ システムのプロパティが開いたら[詳細設定]タブを選択する。
❷ [環境変数]ボタンをクリックする。
▶ 手順 2
環境変数のダイアログでは、システム環境変数のペインで編集する。
❶ [Path]の文字上をクリックし選択する。
❷ [編集]ボタンをクリックする。
▶ 手順 3
環境変数名の編集ダイアログでは[参照]をクリックする。
▶ 手順 4
インストールしたOpenSSLフォルダー内の[bin]フォルダーを登録する。
[C:\Program Files\OpenSSL-Win64\bin]
ローカルディスク(C:) ➡ ❶ Program Files ➡ ❷OpenSSL-Win64 ➡ ❸bin
❹ binが選択出来たら[OK]ボタンをクリックする。
▶ 手順 5
環境変数名の編集ダイアログの戻るため確認する、
❶ C:\Program Files\OpenSSL-Win64\binを確認する。
❷ 間違いなければ[OK]ボタンをクリックする。
環境変数にパスを通す作業は完了したため、ここで開いたダイアログすべてを[OK]ボタンで閉じる。
▶ 手順 6
最後に、CUI(PowerShellやコマンドプロンプトなど)を起動して[openssl version]コマンドを入力してみる。
❶ OpenSSLのバージョンを表示してopenssl versionと、コマンドを入力した。
❷ OpenSSLのバージョンはこれだよ!と、表示された。
このように直接コマンド入力のみで、パスを入力しなくても機能するため環境変数にパスが通っていることになる。
以降はパスなしで openssl <コマンド> <コマンドごとの引数>の形でOpenSSLが実行できるため、手間が省けて作業効率が上がる。
SSL証明書は、公開鍵暗号方式でWebサイトやサーバーとの通信を暗号化するために使用されるセキュリティプロトコルである。
⑴ SSL証明書を取得するには、最初にサーバーで秘密鍵を生成、次に公開鍵を含むCSRファイルを生成、最後にCRTファイルを送信して証明書を取得する必要がある。
⑵ このページで作成するSSL証明書の拡張子の種類とその内容を記す。
① .keyファイル:秘密鍵を含むファイルであり、証明書によって保護された情報の暗号化と復号化に使用される。 このファイルはWebサイトやサーバーに保存され、安全に保護する必要がある。
② .csrファイル:Certificate Signing Requestの略で、証明書の発行要求を含むファイルである。 このファイルは、Webサイトやサーバーが証明書を要求するために使用される。
③ .crtファイル:サーバーの公開鍵と、証明書に関する情報を含むファイルである。このファイルは、Webサイトやサーバーが信頼された証明書を取得した場合に生成される。
⑶ コマンドを実行する前に、SSL証明書を入れるフォルダーを作成しておく。このページでは以下のようにCのカレントに作成した。
・ [C:\SSL]
⑷ CUIは何でもいいが、このページではコマンドプロンプトを管理者権限で起動して以下のコマンドを実行する。
赤文字の部分は自分の設定やドメインなどに変更する必要がある。また、このページでは必要最小限を入力しているため、必要な場合は無入力個所も入力する。
事前に作成したSSL証明書を入れるフォルダー内に入る。
>CD C:\SSL |
① .keyファイルを作成する。
>openssl genrsa -out server.key 2048 |
② .csrファイルを作成する。
>openssl req -new -key server.key -out server.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) [AU]:JP |
State or Province Name (full name) [Some-State]:Kanagawa-Ken |
Locality Name (eg, city) []:Kawasaki-City |
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Span Co.. td. |
Organizational Unit Name (eg, section) []: |
Common Name (e.g. server FQDN or YOUR name) []:span.com |
Email Address []: |
Please enter the following 'extra' attributes |
to be sent with your certificate request |
A challenge password []: |
An optional company name []: |
・ 上記.csrファイル入力内容の翻訳を以下に記す。
>openssl req -new -key server.key -out server.csr
組み込まれる情報の入力を求められます証明書要求に追加します。
入力しようとしているのは、識別名または DN と呼ばれるものです。
かなりの数のフィールドがありますが、空白のままにすることができます一部のフィールドにはデフォルト値があります。
「.」を入力すると、フィールドは空白のままになります。
-----
国名(2文字コード)[AU]:jp
都道府県名(フルネーム)[都道府県]:神奈川県
地域名(都市など)[]:川崎市
組織名 (会社名など) [Internet Widgits Pty Ltd]:Span Co.. td.
組織単位名 (セクションなど) []:
一般名 (例: サーバーの FQDN またはあなたの名前) []:span.com
電子メールアドレス []:
次の「追加」属性を入力してください証明書リクエストと一緒に送信されます。
チャレンジパスワード []:
オプションの会社名 []:
③ .crtファイルを作成する。(365=1年間有効、3650=10年間有効)
>openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt |
ここでは、OpenSSLで作成した証明書を設定する。ApacheやNginxでSSL証明書を設定する場合、一般的には以下の2つのファイルを設定するが、設定順は以下のとおりである。
① SSL証明書ファイル(.crtファイル)
② 秘密鍵ファイル(.keyファイル)
⑴ Apacheでは、一般的にhttpd.confやapache2.confファイルまたはhttpd-vhosts.conf内で、以下のように設定する。また、赤文字の部分はご自分の設定やドメインなどに変更する必要がある。
また、相対パスでエラーになる場合は、以下のように絶対パスで設定する必要がある。
・ ServerNameには、SSL証明書が適用されるドメイン名を指定。
・ /SSL/server.crtは、SSL証明書ファイルのパスを指定。
・ /SSL/server.keyは、秘密鍵ファイルのパスを指定。
<VirtualHost *:443> |
ServerName span.com |
---------- |
SSLEngine on |
SSLCertificateFile C:/SSL/server.crt |
SSLCertificateKeyFile C:/SSL/server.key |
---------- |
</VirtualHost> |
⑵ Nginxでは、一般的にNginxの設定ファイルであるnginx.conf内で設定する。
server { |
listen 443 ssl; |
server_name span.com; |
ssl_certificate C:/SSL/server.crt; |
ssl_certificate_key C:/SSL/server.key; |
---------- |
} |
⑶ 設定が完了したら、ApacheまたはNginxを再起動する。これをよく忘れる!
SSL証明書を作成して設定が終わったら、Webサーバーソフトを再起動して[https]でホームページを表示させてみる。
⑴ OpenSSLで作成したSSL証明書は、自己証明書のため、CA(認証局)から得たものではないため、以下の画像のようにブラウザー上ではセキュリティの警告が出てしまう。このプライバシーエラーのダイアログを非表示にするためには、まず[詳細設定]をクリックして次に進む。
⑵ 画面下の[span.comにアクセスする(安全ではありません)]の文字をクリックする。
⑶ ホームページの表示はできたが、アドレスバーに「保護されていない通信|https」と、ビックリマークが付いている。
通信が暗号化されているため、このままでも「問題はない。」または「気にしない。」という方はここで終了する。
しかし、社内などでこのまま使用していると信ぴょう性の問題などがあり、どうしても気にしてしまう。この警告が出ないようにするには一工夫しなければならないため、以下の他ページで紹介することにする。
・ 警告を出ないようにする方法 ➡ OpenSSLの証明書を警告が出ないように作成