1こんにちは、AvintonエンジニアのS.Yです。先日、セキュリティをテーマにした研修を受けた中で特に重要かつ奥が深いと教えられたのがSSLでした。SSLは、最近ではセキュリティ対策として重要視されてサイトを運営する人にとってはもはや常識と呼ばれるまでに浸透しています。簡単には知っているけど一体どういう仕組みなのか、セキュリティ対策のためにとりあえず導入はしているけど本当のところなぜ大切なのか分からないという意見もあるかと思うので、今回はSSLについて皆さんと一緒に学習していきたいと思います。Layerの略でそのままで言うとネット通信をする出入り口であるSocketが存在する層の安全性を確保するための方式のことです。現在では当たり前のようにインターネットを介した商取引や個人情報のやり取りが行われていますがちょっと考えてみるとかなり危険なことを日常で行なっています。そんな気軽に自分の大事な情報を普段何気なくインターネットに流しても安全に取引を行えるのはSSLが安全性を確保してくれているからです。政府・サイバーセキュリティ戦略本部が政府機関等のWebサイトと電子メールにはSSL化するよう義務付ける方向性を生み出しているようです。政府が率先する形でSSL化を常態化するように進めていますが、実際はどれだけのWebサイトがSSL化に対応しているのでしょうか?こちらのサイトによると国内上場企業のサイト全体で見ると約47%ほどしかSSL化に対応していないという事実があります。上場企業サイトだけでその割合ですからWebサイト全体で見るともっと割合が少なくなります。ちなみにIT系企業でもSSL化が進んでいるのは55%ほどで業界全体で見ると一番大きな数字にはなりますがSSLが他の業界に比べて身近なIT系企業の半数がまだSSL化に対応していないということになり、セキュリティの重要性は頭でわかっているけど行動には移していないのが数字として現れています。因みに2014年8月にGoogleからWebサイトが常時SSL化を施していないと検索結果で上位にでることはないと発表して以来、SSL化しているサイトを優遇する傾向は強まっています。3.SSLの仕組みSSLと聞くと暗号化してセキュリティを高めるものというように漠然と捉えている人が多いのではないかと思います。SSL化が大事だと言われてもどのように重要で、どのようにセキュリティを高めるものなのかはっきりと分からないからSSL化の対応が遅れているものと予想します。SSLはどのような仕組みになっているのでしょうか?まずSSLが暗号化する対象が一対一での機器の間でやり取りされているデータです。このデータには例えばパスワード、アカウント、カード番号や住所などの個人情報、HTTPメッセージのボディ(内容)のみが暗号化の対象となります、逆にボディ以外の部分(誰に送信するかといった宛先)は暗号化の対象にはなりません。次に仕組みについてですが、SSLにおいて出てくる登場人物が1クライアント、2Webサーバ、3SSLサーバ証明書、4共通鍵、5秘密鍵の5つです。HttpsサイトにアクセスするとWebサーバからサーバ自身の身元を証明するサーバ証明書がクライアントへ送られます。因みにこの証明書にはサーバの署名が付与されているのでクライアントは認証局に登録されている公開鍵でサーバ証明書の署名が本当にアクセス先のWebサーバのものなのかを確認します。ここまでがお互いの存在を確認しあう流れです。お互いの身元が確認できたら次に行うことはデータを送ることです。データを送る時の事前準備としてサーバ側からサーバの共通鍵を受け取っておきます。データを送る際にクライアントがすることは2つ、1つ目がサーバ側で共通鍵を作成するための材料となるデータを生成し、そのデータを事前にサーバから受け取った公開鍵で暗号化します。2つ目が先ほど生成した共通鍵作成の材料となるデータから共通鍵を作成して、この鍵で送りたいデータを暗号化します。最初にクライアントから送付するものは共通鍵作成材料となるデータを送ります。これを先に行うことでサーバ側では秘密鍵で暗号化された共通鍵作成材料を解錠してそこから共通鍵を作成します。その後で暗号化された個人情報等が入ったデータが送られてくるのでそれをサーバの秘密鍵で解錠して読めるようにします。サーバからクライアントへデータを送るときも先ほどサーバで作成した共通鍵を使って同じ手順でデータのやり取りを繰り返します。仕組みとしては上記のような感じですがここで気づくことはネット上に流れるのは暗号化されたデータと共通鍵作成用の材料のみです。共通鍵など鍵自体が一切流れることがありません。次に毎回データのやり取りをするときに同じ共通鍵を使っていないということです。SSL化が比較的安全と言われるのは暗号化をするときに使われる鍵の管理が徹底して守られるように作られていることです。4.SSL化の手順SSL化へと行うための手順を紹介していこうと思いますが、手順を細かくここでは説明は致しません。サーバ証明書作成は黒本のp.32〜p.33、クライアント証明書作成は黒本のp.35〜p.36、SSLの設定方法は黒本のp.43〜p.57に掲載されています。SSL化をしていくとCSRを使ってサーバ証明書を作成するときに以下のようなエラーが出てくる可能性があります。空ファイルを作成します。すべての後続の証明書をラベル付けするシリアルファイルを作成します。/etc/pki/CA/serial上記の場合だと鍵の作成者の身元等の情報の連番が1000から始まり、後続の証明書を作成したときに連番付きでindex.txtに履歴として追記されます。SSL化の手順でopensslでどのようなコマンドを打っていったらよいのかは割愛させていただきます。SSL化の手順はインターネットで調べると作者ごとにやり方が多少異なるのが見受けられたからです。方法がいくつかあるのはいいことかと思いますが、個人的にはいきなりブログに頼るのは良くないと思います。個々のブログは情報が断片的になりがちなので、まずはLPIC303の黒本で体系立てて知識を学んだ方がいいですし、黒本どおりの手順で進めていくとSSLの設定をすることができました。ciphersコマンドで確認ができます。-vとコマンドを打ってみると以下のような結果が表示されます。Mac=SHA1</code>パッと見ただけでは何のことか分からないと思います。上記のから一例で1つ取り上げます。Mac=AEAD1列目のECDHE-RSA-AES256-GCM-SHA384は暗号スイート名を表しています。因みに暗号スイートとは簡単にいうと暗号を組み合わせて1つにまとめたもののことを言います。AEADの4つの暗号アルゴリズムをECDHE-RSA-AES256-GCM-SHA384という名前を与えてまとめています。2列目のTLSv1.2はSSL/TLSバージョンを表しています。3列目以降ですがそれぞれの暗号アルゴリズムの役割を表しています。Kx=ECDHのKxは鍵交換を示していて、鍵交換の時にはECDHというアルゴリズムを使って、4列目のAuは証明書の署名を表し、これに対してはRSAというアルゴリズムが使われています。このように状況と過程に応じて暗号アルゴリズムを使い分けています。見てみると状況に応じてよく使われているアルゴリズムがほぼ決まっているように見えます。鍵交換の時はプロトコルのバージョンに関係なくECDH、DHアルゴリズムが一番使われています。DHとECDHは系統としては同じアルゴリズムになります。DHとはDiffie-HellmanというDiffieとHellmanという人物が作った鍵共有のアルゴリズムのことです。このアルゴリズムの利点は安全でないネットワーク上でも秘密鍵を第3者に知られることなく指定の相手と鍵を共有できることです。仕組みとしては簡単で自身の決まった情報を渡して相手が本人かどうか確認するのではなく、その時だけに必要な一時的な秘密情報を作ってそれをもって当人同士を確認し合うというものです。鍵を共有する時、安全性が高いアルゴリズムです。DHをさらに進化させたのがECDHで、ECは楕円曲線のことです。ECDHが行なっていることはDHと同じようなことですが、量子コンピュータがないと解けないレベルのアルゴリズムなので鍵共有におけるセキュリティとしては現在のところ世界一だと思います。他にも証明書の署名でよく使われるのはRSAという5種類の数学知識をふんだんに使った公開鍵暗号であったり、通信を暗号化するのにDESというアメリカの国家安全保障局が普段から使っているアルゴリズムが使われていたりします。いずれにせよ暗号化の技術は数学の知識が数多く使われていますが、個人情報が奪われてもどうすれば解読されずに済むのかを追求していった結果、専門性の高い分野に押し上げられていきました。IT関連の分野に携わっていてもそれほど深く馴染みがない謎な分野でもあります。6.SSL化していれば安全?SSL化しているからあとは何もしなくても大丈夫という考えに陥ってしまう方が中にはいるかとは思いますが、SSLはあくまでセキュリティを高めるための手段の1つでありそれが全てではないです。それでもSSLを導入すると暗号化してのやり取りになり、手順が増えることで通常より通信速度が遅くなりますが、現在攻撃方法としては厄介な中間者攻撃に対しても有効なので安全性はかなり高いといった印象です。いつSSLの脆弱性が見つかるか分からないので、セキュリティに関する情報はこまめに仕入れておき、自分の身をしっかりと守るためにSSLを導入したとしてもガードを下げないようにしておくことが最も有効なセキュリティ対策ではないかと思います。7.まとめ自社研修をきっかけにSSLについてより深く知る必要が出てきましたので今回はこのテーマについてお話しました。SSLは相手の顔や印象が分からないインターネット上でやり取りするために自分は怪しいものではないことを証明するための安全な手段だと言えます。機械学習など最新の技術をセキュリティ面に活かす動きも出てきていますが、それでもセキュリティ事故は減らすことはできてもなくなることはないと思います、なぜならセキュリティ事故で最も多い原因が人為的に起こされたことだからです。人の気の緩みをどうにか解決するのは今のところ人工知能など最新の技術でもまだ不可能なので、これは時代が変われどセキュリティ事故を防ぐための手段は変わることはないと思います。Avintonは仲間を募集しています!Avintonはエンジニアを積極採用しています。文理・経験問わず、これまで様々なバックグラウンドを持った社員を採用してきました。現在いい勢いで成長しているAvinton。社員の数もどんどん増加しています。