サーバ証明書(1)、自己証明書

サーバ証明書(1)、自己証明書

サーバ証明書とは

以下はGMO GlobalSignから引用:https://jp.globalsign.com/ssl/about/
CyberTrustから引用:https://www.cybertrust.co.jp/blog/ssl/knowledge/ssl-basics.html
IDC Fronterから引用:https://www.idcf.jp/rentalserver/user-support/knowledge/ssl/type.html

○サーバ証明書とは

SSLサーバ証明書は、ウェブサイトの「運営者の実在性を確認」し、ブラウザと ウェブサーバ間で「通信データの暗号化」を行うための電子証明書で、認証局から発行されます。
SSLサーバ証明書には、ウェブサイトの所有者の情報や、暗号化通信に必要な鍵、発行者の署名データが含まれています。SSLサーバ証明書が導入されたウェブサイトは、URLがHTTPSから始まり、先頭には鍵マークが表示されるようになります。
電子証明書、TLSサーバ証明書とも言われています。

○運営者の実在性を確認

SSLサーバ証明書に含まれる2つの鍵(共通鍵暗号方式・公開鍵暗号方式)によって、ブラウザ⇔サーバ間で送受信される個人情報や決済情報などの通信データを暗号化することができます。
暗号化されたデータは、SSLサーバ証明書を導入したサーバで保持する秘密鍵のみでしか解読することができず、悪意ある第三者からの盗聴を防ぎます。

○通信データの暗号化

SSLサーバ証明書に含まれる2つの鍵(共通鍵暗号方式・公開鍵暗号方式)によって、ブラウザ⇔サーバ間で送受信される個人情報や決済情報などの通信データを暗号化することができます。
暗号化されたデータは、SSLサーバ証明書を導入したサーバで保持する秘密鍵のみでしか解読することができず、悪意ある第三者からの盗聴を防ぎます。

○SSLサーバ証明書の必要性

現在のウェブサイトの運営においては「なりすまし」「盗聴」「改ざん」のリスクがつきまとい、また「フィッシングサイト」による詐欺被害が後を絶ちません。
これより主要ブラウザベンダーでは、安全なインターネット環境の推奨を目的に全ウェブページへのSSL導入を推進しており、SSL化(HTTPS化)されていないウェブサイトにアクセスした場合に警告が表示されるようになりました。

サーバ証明書は、「なりすまし」「改ざん」「盗聴」「否認」を防止します。

項目名 内容
なりすまし なりすましとはサイトの運営者や、関係者等相手になりすますことです。例えば、ECサイト運営者になりすまし、クレジットカードの番号や住所等の顧客情報等を取得し、悪用されたりする。
改ざん 情報の送信元と送信先以外の第三者により、情報の内容を書き換えられること。ECサイトなどで、商品の注文数が書き換えられてしまう。
盗聴 情報の送信元と送信先以外の第三者により、情報を盗み見られること。ECサイト等で個人情報のやりとりを行っている際に盗聴されると、住所やクレジットカード番号等が漏れてしまう。
否認 否認とは、自分の行った行為を否定するということ。ECサイトが注文を受付けて商品を配送したのに、購入者が注文をしたことを否定したり、個数が違う等の主張をするといったこと。注文内容が間違いなくWebサイト経由で送られた保証がないと対処のしようがない。

サーバ証明書の種類

以下はGMO GlobalSignから引用:https://jp.globalsign.com/ssl/about/
CyberTrustから引用:https://www.cybertrust.co.jp/blog/ssl/knowledge/ssl-basics.html
IDC Fronterから引用:https://www.idcf.jp/rentalserver/user-support/knowledge/ssl/type.html

SSLサーバ証明書には、サイト運営者(組織)の認証内容によりレベル分けされた「ドメイン認証」「企業実在認証」「EV認証」の3種類が存在します。

○ドメイン認証(DV認証)

ウェブサイトのドメインの使用権を所有していることを認証します。
組織の実在性は確認しないため、登記簿謄本などの提出は不要、個人事業主の方でも証明書の申請が可能です。
申請から証明書発行までの流れ


○企業実在認証(OV認証)

ウェブサイトのドメインの使用権を所有していることを認証します。
組織の実在性は確認しないため、登記簿謄本などの提出は不要、個人事業主の方でも証明書の申請が可能です。
申請から証明書発行までの流れ


○EV認証(Extended Validation)

世界標準のガイドラインに沿って、ドメインの使用権の他、その運営組織の法的・物理的実在性を第三者データベースに照会の上確認し、さらに申し込みの意思と権限を確認の上証明書が発行されます。
申請から証明書発行までの流れ


項目/種類 DV認証 OV認証 EV認証
費用(年) 0-1万円 1-10万円 10万円~
審査 易しい 難しい 難しい
信頼度 低い 中位 高い
ブラウザ表示 鍵マークの表示 鍵マークの表示
企業の実在性
鍵マークの表示
企業の実在性
運営組織名の表示

※ブラウザ表示は、ブラウザにより異なります、詳細はこちらを参照してください。
※さらに、鍵マークやアドレスバーをクリックすると、以下の情報を取得できます。
※    ○証明書の種類やシリアルナンバー
※    ○証明書の有効期間
※    ○通信先の名称・所在地
※    ○発行元の認証局情報

サーバ証明書による通信の暗号化

参考サイト:SSL証明書とは?仕組みや種類についてわかりやすく解説
  https://www.rworks.jp/system/system-column/sys-entry/21283/




①接続を要求
②サーバ証明書を送付
③証明書を検証
④サーバ証明書に含まれる公開鍵で共通鍵を暗号化
⑤暗号化した共通鍵を送付
⑥秘密鍵で共通鍵を復号
⑦共通鍵で通信

openssslのインストール

openssslのインストール

「mod_ssl」/「openssl-devel」をインストール(yum)して、さらにopensslのソースを入手(wget)して、
コンパイル(configue/make)して、opensslをソースから作成します。

    yum -y install mod_ssl

    yum -y install openssl-devel

    wget --no-check-certificate https://www.openssl.org/source/openssl-1.1.1g.tar.gz
	
    tar xfz openssl-1.1.1g.tar.gz
    cd openssl-1.1.1g

	./config --openssldir=/usr/local/ssl
	make
	make install
	openssl version

openssslのインストール/バージョン確認

which openssl
  /usr/local/bin/openssl
openssl version
  openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
  おや、バージョン確認でエラーがでますね。

openssslのエラー対応

上記のエラーが発生した場合の対処方法:
echo “/usr/local/lib64” > /etc/ld.so.conf.d/lib64.conf
ldconfig -v
openssl version ##再度バージョン確認を行います:
  OpenSSL 1.1.1g 21 Apr 2020

自己証明書の作成

自己署名証明書とは、自分自身が持つ秘密鍵によって、それに対応する公開鍵への電子署名を行った電子証明書です。
このような電子証明書は、一部の例外を除き、信頼できるものだとは言えません。
自分のことを自分自身で認証する、いわば「自称」の証明書であり、第三者によるお墨付きが与えられていないからです。
そのため自己署名証明書には、「オレオレ証明書」という俗称が与えられています。

今回は、テスト環境を目的として、自己証明書を作成します、本番環境では、使用できません。

○秘密鍵の作成

公開鍵暗号方式として RSA を利用するので、RSA 方式の秘密鍵を作成します。
作成には openssl genrsa コマンドを利用します。
コマンドに鍵長を指定します、今回は 2048bit の秘密鍵を作成します。

$ openssl genrsa 2048 > server.key

○証明書署名要求(CSR / Certificate Signing Request)の作成

次に証明書署名要求を作成します。
証明書署名要求は、認証局にサーバの公開鍵に電子署名してもらうよう要求するメッセージです。
※自己証明書を作成する為、認証局も自分自身ということになります。
OpenSSL で証明書署名要求を作成するには openssl req コマンドを実行します。

コマンドを実行すると、証明書を発行して欲しいサーバの情報の入力を促されますので、サーバの情報を入力します。

$ openssl req -new -key server.key > server.csr

○サーバ証明書の作成

参考URL:OpenSSL で SSL 自己証明書を発行する手順:https://weblabo.oscasierra.net/openssl-gencert-1/
最後に目的であるサーバ証明書を作成します。
普通であれば上で作成した証明書署名要求 (server.csr) を 認証局に送付して認証局の秘密鍵で署名してもらいますが、ここでは自分で署名することでサーバ証明書を作成しますので上で作成した自分の秘密鍵 (server.key) で署名します。
サーバ証明書に署名するには openssl x509 コマンドを実行します。 今回は証明書の有効期限が1年(365日)ある証明書を作成します。

$ openssl x509 -req -days 365 -signkey server.key < server.csr > server.crt

○証明書の中身を確認

作成したサーバ証明書の中身を確認する。

openssl x509 -in server.crt -noout -text

○apacheサーバへの設定

server.crt/server.keyファイルを/etc/httpd/conf.d/ssl.conf配下にコピー後、
/etc/httpd/conf.d/ssl.confに以下を設定します:

SSLCertificateFile /etc/httpd/conf.d/server.crt
SSLCertificateKeyFile /etc/httpd/conf.d/server.key

○opensslコマンドのサブコマンド

サブコマンド 説明
version バージョン
rand 擬似乱数生成
dgst ハッシュ・MAC出力、署名
passwd パスワードのハッシュ
enc 共通鍵暗号
x509 公開鍵証明書の表示、作成
req 証明書署名要求、ルート証明書
genrsa RSA秘密鍵の作成
genpkey プライベート鍵作成

なお、作成した自己証明書を有効にするには、自己証明書をブラウザに登録する必要があります。
自己証明書を有効にする実際の手順は、ここを参照してください。

サーバ証明書の見え方

サーバ証明書の見え方
「http」/「https」アクセスした場合の違い:Chromeブラウザを使用した場合です。

少々、残念で、不安ですね。:「http」アクセス


これならば、安心してアクセスできますね。:「https」アクセス

「https」アクセスした場合:Chromeブラウザを使用した場合です。

なおウィルスチェック(Avast)でチェックしていると、サーバ証明書のルートがAvastに変わります。
Avastの場合、以下の設定を変更行うと、本来のサーバ証明書のルートが確認できます。

著者:志村佳昭(株式会社トリニタス 技術顧問)