読者です 読者をやめる 読者になる 読者になる

ここにタイトルが入ります

デザイン&プログラミングのことも書くし、それ以外のことも書く。

【お勉強】SSLやらSSHやら。

開発とかその他

前回の続き?

SSLSSHの違いがよくわからない。
証明書とか意味がわからない。

というわけで、自分なりに調べてみましたヽ( ´ー)ノ


SSH

※鍵とか作るときopensshしか使ったことないので、それ以外の場合だと通じない話が
 あるのかもしれません…


SSHとはSecure Shellの略なんですね。
リモートでシェルを利用するときに、盗聴されないよう暗号化して通信するという
やり方のようです。

SSHは「ホスト認証」と「ユーザー認証」のふたつから成り立っているようです。


ホスト(サーバー)認証


まず、自分が接続しているサーバーが正しいかどうかを確認する必要があります。
サーバーにSSHで接続すると、サーバーはホスト公開鍵をこちらに渡してくれます。
もしクライアント(接続元PC)がその鍵の持ち主と過去に接続したことがある場合
(.ssh/known_hostsファイルに記録されている場合)
そのまま接続出来ますが、初めての場合だと確認できませんので「接続してもいい?」と聞かれます。

普通だとココはすっ飛ばしてOK!ってやってしまいますが、
本当はちゃんとサーバー管理者に公開鍵のフィンガープリントを教えてもらって、
接続時に表示されるフィンガープリントが同じかどうか確認する必要があります。
(もらった公開鍵がサーバーの公開鍵と同じだよね、ってこと。)


ユーザー認証


逆に、ホストが「この人受け付けちゃってもいいのかな?」という確認をするのが
ユーザー認証。
このために、opensshなんかをつかってユーザーの公開鍵と秘密鍵のペアを作ります。
で、公開鍵をサーバーに予め渡しておきます。
(公開鍵の内容をサーバーの.ssh/authorized_keysファイルに書き込む)

すると、サーバーはSSHで誰かが接続を求めてきた時に、
予め登録されたユーザーかどうかを判断して、問題なければ接続を許可します。

Github使うときにわけも分からす公開鍵を登録してましたが、
たぶんこれの事だったんですね。

渡した公開鍵と自分の持ってる秘密鍵を照らしあわせて
認証したり暗号化したりしてるんでしょうね。
ちょっとそのへんはよくわかってないので割愛。


〜大変参考になりました!〜
共通鍵暗号と公開鍵暗号の解説とSSHでの認証手順 - Webサービスの始め方
入門OpenSSH / 第3章 OpenSSH のしくみ
SSHでセキュリティ管理 - ブログと歩む社員日記! - 楽天ブログ(Blog)


SSL


なんかwikipedia見てると本当はTLSって言う方が正しいんかな?
Secure Sockets Layerの略で、ことHTTPでセキュアーな通信をするためのプロトコルらしい。

決まったユーザーとホスト(サーバー)がやり取りするだけならSSHでもいいんですけど、
ECサイトみたいな不特定多数のユーザーとホストがセキュアな通信をするのは難しい…

ってことで、電子証明書というものを使ってサーバー認証的なことを行なってるそう。


電子証明書とは


不特定多数の人が接続先のサーバーが目的の正しいものか確認するために、
第3者にサーバーの身元を証明してもらうんですね。

例えばECサイトを運営するのでSSLでユーザーとやりとりしたい場合、
認証局から電子証明書(SSLサーバー証明書)を発行してもらいます。
(有名な認証局と言えばverisignとかglobalsignとかでしょうか?)

ユーザーはサイトにSSLで接続した時(httpsページ)、この電子証明書を受け取ります。
で、ユーザーは認証局から公開鍵を貰って証明書からサーバー公開鍵を取り出します。
ここがうまく行かなかったらサーバーちょっと怪しいぜ、ってことになるんですかね。

でその鍵を使って共通鍵を暗号化して…っていうその後の話は割愛します。

ただこの方法だと、認証局が怪しかったら意味無いじゃんという事になります。


認証局の証明


どうやらサーバー証明書と一緒に認証局の証明書も送られてきているそうです。
で、その証明書がどこか別の認証局から認証されている場合はその証明書も送られてくる。
…で、最終的には認証局の一番上位に存在する「ルート認証局という認証局
証明書が送られて来るそうです。

で、ルート認証局の証明書の確認は簡単で、ブラウザにはあらかじめ
信頼出来るルート認証局の証明書が登録されている。
ブラウザに入っている証明書から辿れる証明書であれば、安心して接続できるってことですね。

前回わからなかった
ルート証明書」をダウンロードしたらSSL通信できたというのは、
ブラウザだったら予めルート証明書が入っているから問題なく通信できたけど、
Mechanize(openssl)を使ってhttpsページにアクセスしたらルート証明書が無くて注意された、
ということだろうか…


〜大変参考になりました!〜
図解で学ぶネットワークの基礎:SSL編 - Lesson4:相手が信頼できることを確かめる「サーバー証明書」とは...:ITpro
Webセキュリティー入門: 第2回「さらに知りたいセキュリティー(SSL)の仕組み」
第9話:どうして電子証明書は信頼できるのか?(4/4)|電子証明書とPKI入門|日本ベリサイン


感想

自分的にはなんとなくスッキリしました。
合っているかどうかわからないけど…

メモとはいえ仮にもひと目に晒す記事で
ココらへんのことを図なしで書くのはひどいですよね反省しています。。
(´・ω・`)

認証局や証明書の発行は自分でもできるので
実際やってみたらもっと理解が進むかもしれませんね!

〜参考にさせて頂きました!〜
オレオレ認証局の作り方~SSL証明書を無料で作る方法 on CentOS 5 | 画像変換の知恵袋
オレオレ認証局 - ビール片手にOSS