非技術者のためのWebセキュリティ　その１

まとめ
======

* URLに鍵マークが出ていれば安全なのか？ → それだけでは安全とは言えません．誰と通信しているのかを確かめましょう．
* 証明書エラーとか出たけど？ → 絶対に接続してはいけません．

私はセキュリティの専門家ではないので，専門家のご意見があれば是非コメントにお願いします．

安全にウェブを使うために
=====================

HTTPS は何のためにあるのか？
---------------------------

HTTPS は Hypertext Transfer Protocol (HTTP) というサーバーと通信する方法を Transport Layer Security (TLS) [^1]を用いて暗号化したものです．これには３つの目的があります．

* 相手との通信を暗号化し，傍受されても内容が分からないようにする
* 改ざんされていないことを保証する
* 通信相手が誰であるかを証明する [^2]

特に３つ目の「通信相手が誰であるかを証明する」はあまり気にされることがありません．しかし，いくら適切な暗号化手段を用いていたとしても通信相手が泥棒では意味がありません．この**自分が想定している相手と通信しているかどうかを自分で確認する必要があります．**

[^1]: 昔はSSLと呼ばれていましたが，バージョンが新しくなって名前も変わりました．
[^2]: 正確には TLS の機能はなく public key infrastructure (PKI) の機能です．

URLに鍵マークが出ていれば安全なのか？
---------------------------------

ブラウザでウェブページを見ていると，URLのところに鍵マークが出ていることがあります．たとえば以下のような表示です．

| ブラウザ | スクリーンショット |
|:--------|:------------------|
| Internet Explorer 11 | <img width="331" alt="Internet Explorer" src="https://qiita-image-store.s3.amazonaws.com/0/56302/899d8931-c191-a183-005c-19db2a390e97.png"> |
| Edge | <img width="289" alt="Edge" src="https://qiita-image-store.s3.amazonaws.com/0/56302/e76b6e21-0d22-baee-6b9b-5e1c3cf574f5.png"> |
| Safari | <img width="279" alt="Safari" src="https://qiita-image-store.s3.amazonaws.com/0/56302/75845741-601d-256e-205b-fc83b58cb932.png"> |
| Chrome | <img width="314" alt="Chrome" src="https://qiita-image-store.s3.amazonaws.com/0/56302/e5dcad0c-2ee4-272e-041d-a25eb48baf2e.png"> |
| Firefox | <img width="268" alt="Firefox" src="https://qiita-image-store.s3.amazonaws.com/0/56302/9b16aaf5-f966-59df-ae47-d632ddd42f19.png"> |
| iOS | <img width="320" src="https://qiita-image-store.s3.amazonaws.com/0/56302/2ce14cec-cc6f-67cd-ef06-0d2f9298103d.jpeg" alt="iOS"> |
| Android Chrome | <img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/56302/01acc59f-c3e1-12c1-4ede-f3f46abde8a9.png" alt="Android Chrome"> |

この表示が出ているときには，そのウェブサイトとの通信はTLSを用いて暗号化されています．なので一見安全には見えるのですが，**鍵が見えていても自分が想定している相手と通信していることは保証されません**．あくまでも暗号化をしている表示だけで，そうやって話している相手が泥棒か，それとも正規の相手なのかは鍵のマークだけでは分かりません．なので，誰と通信しているかは自分で確かめる必要があります．

ちなみに Internet Explorer では鍵マークはURLの表示されている部分の右側に表示されています．もし，左側に出ていたらそれは詐欺サイトの可能性が高いので注意してください．

### 送信先が HTTPS だから送信フォームが HTTP でも大丈夫？

ダメです．HTTPSは暗号化して情報漏えいしないことを保証する以外に，情報が改ざんされていないことを保証します．もし，入力フォームが改ざんされていたとしても，HTTPSでなければ確認する方法がありません．そのため，必ず入力フォームを含めてHTTPSで提供する必要があります．よくありがちなダメなパターンとしては以下のようなものがあります．

* 入力フォームがHTTPで，その送信先がどこかのウェブサービス
  * 送信先が正当かどうかをユーザーには判定できません．
* オンラインで何かを支払うときに，外部委託のクレジット決済ページだけHTTPS
  * その外部委託のクレジット決済ページの支払先が正当かどうかを判定できません．

## 誰と通信しているかを確かめる方法

### ドメインを確認する

まず，第一にドメイン名を確認しましょう．上の図であれば，`www.google.co.jp`や`google.co.jp`の部分がドメインになります．鍵マークが表示されていれば，最低でもそのドメインを所有していることが確認されているはずです（ドメインが乗っ取られていない限り）．一文字違うだけで悪質なサイトにつながることもあるので，一文字たりとも間違っていないことを確認する必要があります．また，ドメイン名を所有していることは確認できても，実際に**そのドメインを誰が所有しているかまでは次の証明書の内容を確認しないと分かりません**．

### 誰が運営しているか確認する

鍵のマークの隣に緑色で会社名が表示されていることがあります．その場合は，その会社が存在していて，確かにその会社が取得した証明書で安全性が確保していることが保証されます．鍵のアイコンをクリックすることで（iOS版 Safari 以外では），その会社がどこに登記されて，誰がそれを確認したのかを確認できます．以下の例では Microsoft Corporation が運営していて Redmond, Washington, US にあり， Symantec が検証したことを示しています．（VeriSign は Symantec に買収されて社名が変わっていますが，IE/Edge では旧社名で表示されています）

| ブラウザ | スクリーンショット |
|:--------|:------------------|
|Internet Explorer |<img width="302" alt="IE" src="https://qiita-image-store.s3.amazonaws.com/0/56302/4bea6d5f-b72a-144a-2f9d-2d5ebaf0a396.png">|
|Edge|<img width="324" alt="IE" src="https://qiita-image-store.s3.amazonaws.com/0/56302/21ae0138-b893-3548-0040-d81c17924423.png">|
|Firefox|<img width="337" alt="firefox1" src="https://qiita-image-store.s3.amazonaws.com/0/56302/c1d581a5-ed60-eac3-d442-eb91006c001e.png"><br><img width="337" alt="firefox2" src="https://qiita-image-store.s3.amazonaws.com/0/56302/e01eb0d8-0261-7ef5-cabe-67c9c5a7aefa.png">|
|Chrome|<img width="317" alt="Chrome" src="https://qiita-image-store.s3.amazonaws.com/0/56302/27549447-5f05-afa2-19a1-503786921d51.png">|
|Safari|<img width="400" alt="Safari" src="https://qiita-image-store.s3.amazonaws.com/0/56302/4a63f14c-8b80-6835-152c-e10e0cc53e0d.png">|

多くの銀行やクレジットカード会社では，オンラインで手続きをするときにこのように緑色で企業名が表示されるはずです．鍵マークは表示されていても企業名が表示されていないときは不正なソフトが盗み見ているかもしれません．[マイクロソフト社](https://www.microsoft.com/ja-jp/)のページでは2016年1月現在，必ず緑の企業名が表示されるはずですので，何かしらの良くないソフトがインストールされている可能性を疑ったほうがよいでしょう．

#### Android での確認の仕方

Android 版 Chrome ではこのような会社名がURL欄に出てくることがありませんので，Firefoxを利用したほうがよいでしょう．Firefoxであれば鍵マークをタップすることで会社名が確認できます．もし，銀行・クレジットカード会社が公式アプリを提供している場合には，そちらを利用すると安全に利用できるかもしれません（アプリがまともに作られていた場合に限る）．

### 緑の企業名が正しければ安全なのか？

鍵マークが出ていて緑色で表示された企業名が正しければ，その企業と自分との間で誰かがなりすましをしていたり，盗聴している可能性は低いです．しかし，自分の使っているパソコンやスマートフォンがウイルス感染している場合には安全性は確保できないので，不審なソフトをインストールしないようにしましょう．

手軽に安全に使うためには？
--------------------
オンラインバンキングなど，安全でなければならないサイトを使うときは一度誰が運営しているかを確認した上でブックマークに登録しましょう．そして，そのサイトにアクセスするときは検索を使ったり，メールのリンクをクリックするのではなく，必ずブックマークからアクセスするようにします．そうすれば毎回必ず同じドメインにアクセスできるので，そのサイトが不正アクセスを受けていない限り安全になります．

ブックマークに登録するのは鍵マークが出ているページにしましょう．日本の銀行サイトの多くはトップページがTLSに対応しておらず，改ざんされたとしても気付くことが出来ません．ネットバンキングのログインページであれば必ずTLSに対応し，多くの場合企業名が緑色の文字で表示されていますのでそちらをブックマークしましょう．

証明書エラーが出たら？
----------------
以下のような画面が出たら，絶対に次に進んではいけません．必ずタブを閉じてしまいましょう．誰かが盗み見しているかもしれません．特に，**Safariを使っているといかにもささいな問題に見えますが，大問題ですので進んではいけません**．

Internet Explorer
<img width="778" alt="Internet Explorer" src="https://qiita-image-store.s3.amazonaws.com/0/56302/f621a6a8-1da5-09bb-bf13-1ef5f1b0f8a5.png">

Edge
<img width="642" alt="Edge" src="https://qiita-image-store.s3.amazonaws.com/0/56302/f36f49e7-b698-3fa5-2f01-c09390ca6bd8.png">

Firefox
<img width="661" alt="Firefox" src="https://qiita-image-store.s3.amazonaws.com/0/56302/fba14a96-6886-5fc8-d149-5dfbedebb2c9.png">

Chrome
<img width="630" alt="Chrome" src="https://qiita-image-store.s3.amazonaws.com/0/56302/654914b8-8809-b296-b459-71846fdd9bc2.png">

Safari
<img width="572" alt="Safari" src="https://qiita-image-store.s3.amazonaws.com/0/56302/8f320589-1dc9-6eb8-f1f8-373d67ba1ce4.png">
<img width="320" alt="IMG_0009.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/56302/1767a435-d50f-6551-20fd-db8b9f934cb0.jpeg">

よくある間違い
------------

* 鍵マークが表示されたら安全 → 緑の企業名まで確認しましょう．
* 暗号化のためものだから，ユーザーからの送信の時だけ HTTPS なら OK → 改ざんされていないことを保証しないと，どこに送られるのか分からないのでダメです．