SSLとSSHについて
なんとなくセキュリティに関するワードなんだろうな、と思ってはいたけれども
そもそも何かをしっかり理解できていなかったし、違いも分っていなかった。
●SSL(Secure Sockets Layer)
SSLの目的としては2つ
①通信内容の暗号化
②サーバーが安全かどうかの証明
まず①について
amazonとかで個人情報を入力する時など、暗号化せずに平文で送ってしまうと
悪い人に見られて悪用されてしまう。
逆にamazonなどで購入履歴などの情報を見るときも暗号化せずに受診すると
悪い人に見られて悪用されてしまう。
これらのことを防ぐために、通信内容を暗号化する必要がある。
方法としては、クライアントがサーバーに接続を要求した時に
サーバーからクライアント側に対してサーバ証明書を送付する
そのサーバ証明書の中に公開鍵が含まれており、その公開鍵を用いて共通鍵を暗号化
サーバー側ではその共通鍵を秘密鍵を用いて復号。
これによってクライアント側、サーバー側で共通鍵を持つことができる。
よって①の目的である通信の暗号化が実現できる。
これはよくある暗号化の話。
では次に②について。
クライアント側からすると、そもそもサーバーが安心できるサイトなのかどうかわからない。
たとえ送った内容が暗号化されても、送り先が悪い人だったら意味がない。
そこで、これから接続する先が信頼できるサイトなのかどうかを判断する事が②の目的。
①の時にも説明したが、サーバに接続を要求した時にサーバ証明書が送られてくる。
この証明書を頼りにサーバー側が信頼できるサイトかどうかを判断する。
たとえサーバ証明書があったとしても、その証明書が信頼できると話限らない
そこで、その証明書が信頼できる。と保証してくれるのが認証局。
ただ、その認証局が本当に信頼できるかわからない...といって堂々巡りになってしまう。
ただ、一番大元をたどるとルート証明書を持つ認証局までたどり着く。
このルート証明書はあらかじめブラウザに登録されているため、確実に信頼できるといえる。
なので最下層の証明書から、中間の証明書(中間CA証明書)をたどり、最上位の証明書(ルート証明書)までたどり着き、最下層の証明書が信頼できると判断可能となる。
この証明書を元に、ユーザーは信頼でいるサイトとして判断し、接続が可能となる。
なお、SSL証明書がある場合はURLが「https」から始まる。
なお、このSSL証明書にも色々と種類があり、信頼度などから値段も様々である模様。
●SSH(Secure Shell)
SSHもサーバーとクライアント間の通信をより安全にするためのもの
SSHの主要な認証方式としては、パスワード認証方式と公開鍵認証方式がある。
パスワード認証方式はセキュリティ的に脆弱らしい、
公開鍵認証方式のみ詳しく解説。
やりたいことは
①クライアント→サーバー側の保証
②サーバー→クライアントの保証
①に関しては、クライアントが今から接続するサーバーが本当に接続しても大丈夫かを判断するたものもの。
サーバーにSSHで接続すると、サーバーが公開鍵を渡してくれる。
この鍵を見て、以前登録したものと同じであるならばアクセスを許可する。
(登録済みでないのであれば、許可するかどうかをこのタイミングで判断する。)
②に関しては
クライアント側でopensshなどを用いて、ペアの共通鍵と秘密鍵を作成する。
公開鍵をサーバーにあらかじめ渡しておく。
クライアント側は秘密鍵の方で暗号化し、それをサーバーに送信。
サーバーは公開鍵で復元することによってクライアントがあらかじめ登録されたクライアントかを判断する事ができる。
どちらも暗号化して、通信を安全に行うためのもの。
なぜならば、SSLはサーバー側がSSL証明書を一つ持てばいいことに対して
SSHは通信路1つに対して、秘密鍵・共通鍵のペアが1つ必要なため。
ただSSL証明書は仕組みが複雑で運用も大変なため、あまり人数が大奥ないのであればSSHの方が楽みたいです。
使い分けが必要ですね。
内容に誤りがある可能性もあるので、その場合はご指摘ください。
初回からやや長めになりましたが、以上です。