仕事でSSL/TLS通信のために証明書を用意していて、
細かな用語などがごちゃごちゃしてきた…、ので、まとめてみます。
※用語解説中心なので、全体的な仕組みを知りたい方は他をあたってください(*_*)
もくじ
2.用語集( 証明書=公開鍵 / 秘密鍵 / CSR / 中間CA証明書 / ルート証明書 / オレオレ証明書(自己署名証明書) / OpenSSL / pemファイル)
3.おわりに
1.SSL/TLS通信とは
通信を暗号化するための仕組み。
昔はSSL/TLSで暗号化を行うには通信負荷がかかっていたため、クレジットカードの値入力など、入力フォームのページでのみ使われていた。
現在は、通信技術の発達による負荷軽減が可能になったことや、通信全体を保護しようという風潮から、
どのようなページであってもSSL/TLSによる暗号化が行われるのが主流となっている。
2.SSL/TLS通信で出てくる用語たち
■証明書=公開鍵
「サーバ証明書」、もしくは単に「証明書」とも呼ばれる。
「間違いなくこのサーバはAmebaのサーバですよ」といったことを証明するほか、
この証明書自体が、サーバの公開鍵となる。
ファイルの中身は「—–BEGIN CERTIFICATE —–」から始まる。
ファイルの拡張子は、「*.crt」、「*.cert」、「*.ca」など。
■秘密鍵
サーバの秘密鍵。
上記の証明書(公開鍵)とペアになる鍵で、機密情報として外部に漏らしたらあかんやつ。
ファイルの中身は「—–BEGIN PRIVATE KEY—–」から始まる。
ファイルの拡張子は、「*.key」など。
■CSR
Certificates Signing Request/証明書署名要求
簡単にいうと、サーバ証明書(公開鍵)の効力を発揮させるための準備書類。
公開鍵情報や、所有者名などが記載されているファイル。
ファイルの中身は「—–BEGIN CERTIFICATE REQUEST—–」から始まるが、
以降の内容は、見た目では暗号のようにしか見えない。。
ファイルの拡張子: 「*.csr」など。
■中間CA証明書
各サーバ証明書(公開鍵)の正当性を証明してくれる、認証局(CA)の署名が、
正当な署名であることを証明するための証明書。
前提として、正式なサーバ証明書は、「このサーバは信頼できますよ」というのを、信頼できる第三者に保証してもらうことが必要となる。
例えていうなら、ある人が「俺はハーバード大卒だ」と言っても、嘘かもしれないのに対し、
「たしかにこの人はハーバードを卒業しましたよ」と、ハーバード大学の教授のお墨付きまでもらえれば、信頼できるようなイメージ。
サーバ証明書も同じで、第三者=認証局にお墨付きをもらうことで、信頼感を保とうという仕組みになっている。
…で、ここで1つ問題が。
第三者である、ハーバード大の教授や、認証局が、そもそもニセモノな可能性もある。
そこで、第三者の言っていることが、そもそも信頼できますよという仕組みが必要となる。
つまり、ハーバード大学そのものから、当該教授が「たしかにこの人は我が大学の教授だ」と保証されれば、教授を名乗る人のことを信頼できるというわけである。
証明書と認証局の関係も同様で、
認証局を名乗る機関を、別の認証局(知名度が高く明らかに信頼できる認証局)が保証する仕組みが存在している。
信頼された認証局によって保証されているからこそ、最終的にサーバ証明書の信頼性も保証されるという、信頼のチェーン(連鎖)という考え方である。
前提が長くなったが、「中間CA証明書」というのは、
明らかに信頼できる認証局(青)が、サーバ証明書を保証する認証局(緑)の、正当性を保証してくれるものである。
■ルート証明書
各認証局の正当性を証明してくれる機関=ルート認証局(CA)が、自らの正当性を証明するための証明書。
通常の認証局は、前述の「中間CA証明書」でも説明した通り、
明らかに信頼できる認証局から、身元を保証してもらう必要がある。
では「明らかに信頼できる認証局」は、どこから身元を保証してもらうのかというと、自分自身で証明できるようになっている。
明らかに信頼できるからこそ、自分で自分を証明してOK、という考え方なのである。
ルート証明書とは、明らかに信頼されている認証局が、自分で自分を証明した証明書である。
■オレオレ証明書
サーバが自分で自分を証明した証明書。
正式名称は「自己署名証明書」という。
しつこくハーバード大の例を出すとこんなイメージ。
サーバで言うとこんな感じ。
「オレだよ、オレ!」というオレオレ詐欺証明の呼び名の通り、何の保証にもなっていない…(-_-;)
ではどこで使われるのかというと、
・企業内部でアプリケーションを作るためのテストをする「検証環境」のサーバの証明
・自社内ネットワーク内のみで利用されるサービスのサーバ証明
などが考えられる。
オレオレ証明であれば、認証局に認証してもらうためのお金がかからないこともあり、
企業であっても、場合に応じて使われることがあるらしい。
その他、個人の運営サイトでオレオレ証明が使われていることもあるかも。
私も、検証環境内で証明書を入れた際の挙動確認のために、オレオレ証明したことはあるが、
企業の公式ページとして公表するものや、お客様への納品物など、
信頼されるべきサイトではまず使ってはいけないものである。
※オレオレ証明の作り方はググってください。
■OpenSSL
SSL/TLSの機能を実装した、オープンソースのライブラリ。
以下コマンドでパッケージをインストールすれば使える。(@Linux)
yum -y install openssl
適切にインストールされているかは、バージョン確認コマンドで行える。
openssl version
※コマンドの使い方は他サイト様を見てください。
■pemファイル
証明書や秘密鍵の情報を、複数まとめて記述しておけるファイル。
情報をそのままの形ではなく、BASE64(文字データの変換形式の1つ)によって形式変換(エンコード)して記述される。
Windowsで作った証明書や鍵の情報を、Linuxではそのまま利用できないため、
pemファイルに変換して利用する、といった使い方がなされる(らしい)。
3.おわりに
~関連記事のご紹介~
公開鍵基盤を利用した技術として、以前PGP鍵の記事も書いたので、よろしければご覧ください。
参考サイト
https://ssl.sakura.ad.jp/column/ssl/
https://www.ssl-concier.com/news/topics/164
https://qiita.com/kunichiko/items/12cbccaadcbf41c72735
https://www.itra.co.jp/webmedia/points_of_ssl_ca_certification.html