
質問
サイトA: HTTPでの通信
サイトB: 自己署名証明書のHTTPSでの通信
のサイトAとサイトBのどちらがセキュアといえるか?
という質問です。
質問背景
個人的にはサイトBの「HTTPSだけど証明書が自己署名証明書」方がセキュアなのではないかと考えています。
なぜなら、自己署名証明書の問題はHTTP通信でも抱えている問題だと思うからです。
ですが、ChromeなどブラウザではHTTPはほとんど警告なしに表示するのに、証明書が信頼できないものは過剰な警告を出すので、
Chromeが「HTTPのほうがマシ(よりセキュア)」と言っているようなきがするのです。
こういう背景で質問して、スッキリしたいと思いました。
私の自己署名証明書の問題点の理解は、以下のサイトからです。
Qiita記事: オレオレ証明書を使いたがる人を例を用いて説得する
から引用させていただくと、
- 暗号化。サーバ側とクライアント側で暗号化/復号化を行うことにより、通信経路上での盗聴・改竄を防ぎます。
- 通信相手が正しいことの保障。DNS cache poisoningや、MITM(Man in the middle)によるSSL終端など、攻撃者によって通信相手が変更された場合に警告を表示することで、攻撃者による盗聴・改竄を防ぎます。
- 改竄の検出。サーバ側で証明書を使って署名することで、通信経路上で改竄された場合にもクライアント側で受信した際に改竄を検出することができます。
1は自己署名証明書でも可能
2, 3は自己署名証明書では問題になる
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
下記のような質問は推奨されていません。
- 質問になっていない投稿
- スパムや攻撃的な表現を用いた投稿
適切な質問に修正を依頼しましょう。
回答5件
21
ベストアンサー
1は自己署名証明書でも可能
もちろん、オレオレ証明書をルートに入れればそれで問題ないですが、そうしなかった場合、攻撃者が偽の証明書を提示して中間者攻撃を仕掛けている場合も考えられますので、1すら担保されません。「HTTPSなのに証明書がおかしい」というのは、そういった攻撃を示唆するものですので、「単なるHTTP」以上に警告する必要があります。
なお、「オレオレ証明書」と一口に言っても、いくつかパターンがあります(高木浩光さんによる区分)。
このうち、第3種・第4種は「使う人のマシンにルート証明書を取り込む」ことで、(証明書の不正発行に関するリスクを除けば)普通のHTTPSと同様に警告なしで使えます。第5種はちょっと仕方ない部分があるのですが、第6種は単なる設定ミスです。
投稿2017/04/25 02:37
総合スコア142993
18
- 暗号化。サーバ側とクライアント側で暗号化/復号化を行うことにより、通信経路上での盗聴・改竄を防ぎます。
1は自己署名証明書でも可能
そもそもこれが誤解です。自己署名証明書では、盗聴・改ざんを防げるとは限りません。
そもそも盗聴・改ざんが問題になるのは、通信路上に攻撃者がいるケースです。例えば、以下が考えられます。文字通りネットワークの経路上に攻撃者がいるケースだけではありません。
- 通信機器を操作できる場所に攻撃者がいて、ミラーリングポートなどから盗聴する
- 暗号化していない、あるいは弱い暗号化の無線LANを盗聴する
- 無線LANの偽アクセスポイントをたてる
- 企業などのPROXYサーバーを操作できる
- ARPスプーフィング攻撃によりデフォルトゲートウェイを詐称する
- DNSに対する攻撃により、攻撃対象サーバーの偽物にアクセスさせる
5の例としては、さくらインターネットでの事例があります。
[ARPスプーフィング]他のマシンあての通信を乗っ取り,監視強化が先決
6の事例としては、Secuniaの事例が有名で、LinkedInも同種の攻撃が疑われた事例があります。
Secuniaのサイトにハッキングメッセージ、DNSがハイジャックされる
LinkedInでDNSハイジャックの可能性
そして、上記リストの2以外のケースで中間者攻撃ができます。そうなると、通信相手の認証機能がなければ、盗聴・改ざんは防げません。現に、さくらインターネットの事例では通信内容が改ざんされているわけですし、攻撃形態としては中間者攻撃なので、自己署名証明書によるHTTPSでも盗聴は防ぐことはできません。
また、そもそもHTTPSは、仮に通信路がどんな状況であっても、安全に通信ができるか、安全に通信できない場合は利用者がそれに気づくことができるというものです。例えば独裁国家がネットワークを把握していても、そこの住民のHTTPSの通信は盗聴できないことが求められるのです。
そうなると、ブラウザ側では、意図的な自己署名証明書による運用と盗聴による偽の証明書を区別することはできないので、自己署名証明書は一律に強い警告を出すしかないわけです。これはHTTPSの原理上、ブラウザに求められる機能です。
まとめると以下の通りです。
- HTTPによるサイトAと自己署名証明書HTTPSによるサイトBを比べると、サイトBの方が盗聴を防げる余地はあるが、その確実性は期待ほどのものではない
- HTTPSは、そもそも安全に接続するか、安全性が担保できないなら接続しないという性格のものであるので、安全でない場合にブラウザが強い警告を表示するのは妥当である
投稿2017/04/26 13:24
総合スコア11655
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
8
サイトA: HTTPでの通信
サイトB: 自己署名証明書のHTTPSでの通信
この2つでの比較であれば、サイトBの方がマシですが、一般的な https でユーザが求めるレベルに達していないという警告をブラウザが発しています。
http と https のサイトではユーザから求められるセキュリティ度合いが違うことが警告の根底です。
ファーストフード店でクレジットカードが使えなくてもイラッとしないけど、レストランで使えないとイラッとする。みたいなものです。
投稿2017/04/25 02:36

退会済みユーザー
総合スコア0
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
5
HTTPで運用されているサーバは、データがセキュアである必要がないと考えて運用されている。
だから、HTTPでブラウザからアクセスされても問題とは思わない。
そもそもHTTPでは証明書や暗号化は使わないので、警告も無い。
地方自治体の公園に、誰が入っても文句を言われないようなもの。
HTTPSで運用されているサーバは、データ(サーバに送られてくるデータも、ブラウザに返されるデータも)がセキュア(改変されず、他に漏れない)である必要があると考えて運用されている。
だから、信用ある証明書を求めるし、警告も出す。
市役所で戸籍謄本を取る時に、免許証など公的機関が発行した写真付きの書類が要求されるようなもの。
HTTPとHTTPSは必要に応じて使い分ければ良いのであって、「どちらがセキュアか」で競い合うものではないと思います。用途が違うのですから。
=
もちろん、HTTPとHTTPSのどちらがセキュアかといえば、SecureのSがついているHTTPSです。
信頼性のある証明書を使った場合と、信頼性のない証明書を使った場合では、信頼性のある証明書を使ったほうがセキュアです。
このような自明なことを質問したかった訳ではないと思いましたので、このような回答をいたしました。
投稿2017/04/25 03:02
総合スコア6911
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
0
解決済みの質問ですし、前記回答に追加情報が有る訳ではないのですが解は明白である点を強調したいので書きます。
公開サーバで自己証明のhttpsを構成してはいけません。自己証明局を立てるツールはあくまでも試験用なのであってテスト環境意外で使用してはいけません。ブラウザが自己証明のサイトをアクセスする際、厳重な警告メッセージを表示した後「非常に危険ですがアクセスしますか?」のメッセージを承知してアクセスすることになります。ユーザがこれを慣例としてしまったら、本当の詐称サイトにアクセスしても気づくことができません。
選択肢として選ばないべきだと考えます。
投稿2017/05/02 17:54
総合スコア1339
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
回答へのコメント


退会済みユーザー
2017/05/03 00:59 編集
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
関連した質問
意見交換
受付中
スクレイピングの法的性について
回答5
クリップ0
更新
2023/05/20
Q&A
解決済
LinearLayoutでボタンを等間隔で横に並べる
回答1
クリップ0
更新
2023/05/31
Q&A
解決済
Rのggplot2で作図したグラフを拡張メタファイル(.emf)として余白無く出力したい
回答2
クリップ0
更新
2023/06/01
意見交換
受付中
URLの末尾スラッシュの有無について
回答4
クリップ1
更新
2023/05/31
Q&A
解決済
【WPF】カレンダーをカスタマイズし、日付欄にコメント欄を追加したい
回答1
クリップ1
更新
2023/05/30
Q&A
解決済
スマホでアドレスバー・メニューバーを強制的に常時表示させるjavascriptを知りたい
回答1
クリップ1
更新
2023/05/30
Q&A
解決済
DXLIBを使いシューティングゲームを作っています。連射させたいです。
回答3
クリップ0
更新
2023/05/19
Q&A
解決済
AoutItでOpenCVを使いたいが、導入でつまづく
回答1
クリップ0
更新
2023/06/01
同じタグがついた質問を見る
HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。
HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。
このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。
SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。