OpenSSLの証明書を警告が出ないように作成
OpenSSLは、暗号化や復号化、デジタル署名、公開鍵証明書の生成や検証、ランダムなデータ生成など、さまざまな暗号技術を提供する。これにより、Webサーバーとクライアント間の通信など、セキュアな通信を実現することができる。また、世界中の多くのWebサーバーで使用されており、多くのアプリケーションやデバイスで使用されることもある。
OpenSSLで作成したSSL証明書は暗号化されるため、LAN内でも第三者による不正な盗聴や改ざん、なりすましを防止するために、通信内容を暗号化することで、プライベート内容やパスワードなどの個人情報を保護することができる。
しかし、OpenSSLで作成した証明書はCA(認証局)から得たものではないため、以下の画像のようにブラウザー上ではセキュリティの警告が出てしまう。このまま自宅で使用するには問題ないと思うが、社内などで使用していると信ぴょう性の問題などが発生する可能性がある。
このページでは、OpenSSLでLAN内のサーバーに設定したSSL証明書が、セキュリティの警告が出ないように作成する方法を、画像を用いながら記すことにする。
------[ 目 次 ]------
・ OpenSSL証明書の類似記事 ➡ OpenSSLでLAN内サーバーにSSL証明書作成
【留意事項】
Windowsやブラウザーのバージョンおよびアップデート状況などにより、表示画面および機能または編集手順などが若干異なる場合がある。
SSL証明書に含まれる情報として、コモンネームを含むサブジェクトとは別に「SAN」という拡張領域がある。「SAN」とは、Subject Alternative Nameの略称で、サブジェクトの別名である。これを使用すると、1つのSSL証明書で保護する追加のホスト名を指定できる。その内容は、証明書においてドメイン名やIPアドレスなどを記述する。
この「SAN」を使用するため、以下の簡単なテキストファイルを作成する。ファイル名は任意でいいが、ここでは[san.txt]とする。
⑴ SubjectAlternativeNameは、以下のようにDNSを設定する。使用するドメインおよびそのドメインに対するIPアドレスを設定する。この場合IPアドレスは固定する必要がある。また、赤文字のドメインおよびプライベートIPアドレスは自分の環境に合わせる。
subjectAltName=DNS:span.com,IP:192.168.1.100 |
⑵ IPアドレスを固定したくない場合、好ましくはないが以下のようにドメインのみでも機能してくれる。また、赤文字のドメインは自分のドメインに合わせる。
subjectAltName=DNS:span.com |
OpenSSLを使用して、前記で作成した「SAN」を書き込んだSSL証明書を作成する。まだOpenSSLをインストールしていない場合は以下を参照する。
・ OpenSSLのインストールなど ➡ OpenSSLでLAN内サーバーにSSL証明書作成
ここからはOpenSSLをインストール済みで、Windowsの環境設定が完了しているものとして記していく。
▶ 手順 1
SSL証明書を取得するには、最初にサーバーで秘密鍵を生成、次に公開鍵を含むCSRファイルを生成、最後にCRTファイルを送信して証明書を取得する必要がある。
⑴ コマンドを実行する前に、SSL証明書を入れるフォルダーを作成しておく。このページでは以下のようにCのカレントに作成した。
・ [C:\SSL]
⑵ CUIは何でもいいが、このページではコマンドプロンプトを管理者権限で起動して以下のコマンドを実行する。
赤文字の部分は自分の設定やドメインなどに変更する必要がある。また、このページでは必要最小限を入力しているため、入力していない項目も必要な場合は入力する。
事前に作成したSSL証明書を入れるフォルダー内に入る。
>CD C:\SSL |
① .keyファイルを作成する。
>openssl genrsa -out server.key |
② .csrファイルを作成する。
>openssl req -new -key server.key -out server.csr -subj "/CN=span.com" |
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 -in server.csr -out server.crt -req -signkey server.key -days 365 -extfile san.txt |
ここでは、OpenSSLで作成した証明書を設定する。ApacheやNginxでSSL証明書を設定する場合、一般的には以下の2つのファイルを設定するが、設定順は以下のとおりである。
① SSL証明書ファイル(.crtファイル)
② 秘密鍵ファイル(.keyファイル)
⑴ Apacheでは、一般的にhttpd.confやapache2.confファイルまたはhttpd-vhosts.conf内で、以下のように設定する。また、赤文字の部分はご自分の設定やドメインなどに変更する必要がある。
また、相対パスでエラーになる場合は、以下のように絶対パスで設定する必要がある。
<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証明書をWindowsシステムへインポート(読み込む)し、証明書を信頼させてセキュリティによる警告を出さないようにする方法を以下の手順で行う。ブラウザーなら何でもいいが、ここではシェア率トップのChromeを使用することにする。
▶ 手順 1
Chromeを起動して右上の縦の三点リーダーから[設定]をクリックし、表示されたダイアログで以下の設定をする。
❶ 左ペイン内の [プライバシーとセキュリティ] をクリックする。
❷ 右ペイン内の [セキュリティ] をクリックする。
▶ 手順 2
表示されたセキュリティダイアログの[デバイス証明書の管理]をクリックする。
▶ 手順 3
証明書のダイアログでは以下の設定をする。
❶ 上部メニュー内の [信頼されたルート証明機関] のタブをクリックする。
❷ [インポート] ボタンをクリックする。
▶ 手順 4
証明書のインポート ウィザードの開始が表示されるため、内容を確認して[次へ]ボタンをクリックして次へ進む。
▶ 手順 5
インポートする証明書ファイルを設定するため[参照]ボタンをクリックする。
▶ 手順 6
ここでインポートするファイルは、前記で作成した公開鍵と証明書情報を含む「.crt」ファイルである。
❶ 証明書を格納したフォルダーをたどり、このページでは[server.crt] を選択する。
❷ 選択したら [開く] ボタンをクリックする。
▶ 手順 7
証明書ストアのダイアログでは、証明書の保管を指定する方法を設定する。このページでは以下の方法で設定する。
❶ [証明書をすべて次のストアに設定する]を選択する。
❷ [信頼されたルート証明機関]を選択する。
❸ [次へ]ボタンをクリックする。
▶ 手順 8
証明書のインポート ウィザードの完了が表示されるため[完了]ボタンをクリックする。
▶ 手順 9
セキュリティ警告のダイアログが表示されるため、内容を確認して[はい]ボタンをクリックする。
▶ 手順10
作成したSSL証明書のインポートが完了したため、以下の操作ですべてを閉じる。
❶ 「正しくインポートされました」のダイアログの[OK] ボタンをクリックする。
❷ [閉じる] ボタンをクリックし、証明書のインポート ウィザードをすべて閉じる。
ここまで、OpenSSLでLAN内のサーバーに設定したSSL証明書を、セキュリティの警告が出ないように作成する方法を記してきた。このページでSSL証明書を設定したブラウザー(このページではChrome)が開いていたら一旦閉じて再起動し、証明書を設定したドメインのページを表示する。
アドレスバーに「保護されていない通信|https」と表示されていた警告がなくなり、以下画像のように証明書が有効である鍵マークがしっかりと表示されている。鍵マークをクリックすると、設定した内容や有効期限などが表示される。
OpenSSLで作成した証明書は自己証明書である。自己署名証明書は、証明書の発行者が自己で署名した証明書であり、CAによって署名された証明書と比べて、信頼性が低いとされている。ただし、自己署名証明書でも立派なデジタル証明書であり、データの暗号化や通信のセキュリティを確保することができる。