QA@IT

IISの証明書について

22839 PV

IISで自己証明書(公的に正当性が確認されていないローカルな証明書)がありますが、
ローカルな証明書とはいえ、この証明書を使えばSSLで暗号化された通信ができると

いうことは理解できたました。

しかし、このIIS自己証明書はWebサーバーにインストールするだけで、
Webサーバーに接続するクライアントPCにはインストール(インポート)
しなくても良いものなのでしょうか?

下記のサイトにIIS自己証明書の作成方法が書いてあり、IISが稼働している
サーバーで自己証明書を作成して、https://localhostで接続していますが、
クライアントからの接続方法、また、クライアントPCにもサーバーで作成
した証明書をインストールする・しないなどの記載がないもので
証明書の取扱いがいまいち分かりません。

http://www.websec-room.com/2013/02/18/57
どなたか、ご教授下さい。

回答

サーバ証明書はサーバにインストールするものであり、クライアントPCにはインストール(or インポート)しなくてよいです。SSL/TLS通信ではハンドシェイク時にサーバからクライアントにサーバ証明書を送付することになっています。ですので「クライアントPCにもサーバーで作成した証明書をインストールする・しない」についていえば「しない」の方です。

リンク先のやり方はサーバ証明書が正規でなくテスト用証明書を使用しているので、クライアントからの接続時にはリンク先に記載されているようにエラーが出ます(最初の画面キャプチャ「このWebサイトのセキュリティ証明書には問題があります」の箇所)。リンク先の記載のようにしてテスト用証明書を作ることはできますが、CA(認証局)による署名がありませんから、正規の証明書ではなく、あくまでフェイクにすぎません。

しかしテスト段階ではブラウザのエラーをスキップすることでテストは可能です(「このサイトの閲覧を続行する(推奨されません)」を選択するなど)。これは正常なSSL/TLS通信ではなく、あくまでサーバ証明書のエラーを無視する(or 証明書の検証自体を無効化する)ことでテストを実施しているだけです。

ですので「クライアントからの接続方法」についていえば、単に普通に接続すればよいだけですが、サーバ証明書のエラーをスキップ(無視)する必要があります。これはサーバ証明書がテスト用証明書だからであり、正規の証明書に切り替えれば必要なくなります。

ちなみにサーバ証明書はCA(認証局)から発行されるものであり、a11b12k13さんが自分で作ることはできません。自分で作ることができるような「自己証明書」なるものは存在しません。紛らわしいですが、自己署名証明書自己発行証明書ならありますが、これらも証明書である以上CAが発行するものです。リンク先にある「自己証明書」という概念は微妙におかしいですが、内容的には「自己署名証明書」のようです。が、本来の自己署名証明書のことではなく、単にテスト用にカジュアルに作った証明書に自己署名しただけのものです。

以下、余談です。

ローカルな証明書とはいえ、この証明書を使えばSSLで暗号化された通信ができる

の部分について気になった点を述べます。

「ローカルな証明書」でもSSL/TLSによる暗号化通信は可能ですが、その場合の「ローカル」とはプライベート認証局から発行された証明書という意味になります。いいかえると認証局(CA)は必ずしもパブリックである必要はないと思います。ですので「公的に正当性が確認されていないローカルな証明書」であっても正規のプライベート認証局から発行されていればOKのはずです。

ところがリンク先の記載通りに作った証明書は、「ローカルな証明書」ですらなく、そもそも認証局から発行されたものでない擬似的な証明書です。これではSSL/TLSによる暗号化通信はできません。なぜかというと、サーバ認証を正常に通らないと、ハンドシェイクが完了せず、暗号化通信のフェーズにまで進まないからです。サーバ証明書のエラーを無視した場合(or 証明書の検証自体を無効化した場合)は、とりあえず先に進むことは進みますが、あくまで強引に先に進めただけですので正常な暗号化通信が成り立っているわけではありません。

ですのでこの種の証明書はテスト専用と割り切ったほうがよいと思います。

あと証明書にはサーバ証明書の他に「CA証明書」もありますが、今回のケースではクライアントPCにインストール(or インポート)する必要はありません(今回のケースでは発行元のCAも存在しないので、「サーバ証明書」しかありませんが、念のため)。

追記(1)

いくらhttps://で接続しても暗号化通信はできていないということでしょうか?

正確にはhttps://ではなくhttps://example.comのようにして接続すると思います。SSL/TLSによる暗号化通信はクライアント(ブラウザ)とexample.comとの間で成立しなければなりません。それを保証するためにはブラウザはサーバ証明書を見てSubjectのDNの中のCNがexample.comになっていることを確認する必要があります。しかしこのようなチェックが成り立つためには、サーバ証明書は正規でなければなりません。もしサーバ証明書がフェイクでよいとするなら、誰でもexample.comを名乗れるからです。なのでサーバ認証をスキップした場合は、ブラウザとexample.com間のSSL/TLSによる暗号化通信は成立しないといえます。

追記(2)

話がごちゃごちゃしているので、a11b12k13さんが何をやりたいかをクリアにしてもらえませんか?

まずMicrosoftのIIS 7 でサーバー証明書を構成するを見てください。証明書の種類ごとに作り方が違うので、何をどうすればいいかはどれを作りたいかによります。

  • インターネット サーバー証明書を構成する (IIS 7)

Web サーバー上のコンテンツを要求するクライアントに対してサーバーの身元を証明する必要がある場合は、インターネット サーバー証明書を要求します。 インターネット サーバー証明書は、パブリック証明機関 (CA) によって発行されます。

  • IIS 7 でドメイン サーバー証明書を作成する

ドメイン証明書は内部証明書であり、外部の証明機関 (CA) が発行する必要はありません。 Windows ドメインに CA として機能するサーバーがある場合は、ドメイン証明書を作成できます。 この方法は、証明書の発行コストを削減するのに役立ち、証明書を展開しやすくなります。

  • IIS 7 で自己署名入りサーバー証明書を作成する

次の 1 つまたは複数の理由がある場合は、ローカル コンピューター用に自己署名入りの証明書を作成します。

  • サード パーティ証明書の問題のトラブルシューティング
  • IIS をリモート管理する
  • ソフトウェア テスト環境などのように、サーバーと、限られた既知のユーザーのグループとの間に、セキュリティで保護されたプライベート チャネルを作成する
  • SSL 設定に依存する機能のテスト

追記(3)

追加で、IISとかで自己署名サーバ証明書を作成した場合は、サーバ証明書とCA証明書両方の役割を果たしているイメージになり、サーバ証明書自体をクライアントの信頼されたルート証明機関の証明書としてインストールすることになります(警告をなくす場合はですが)。

と言っている人がいて、少々驚いたので、試しに手元のIISで「自己署名入りサーバー証明書」を作成してみましたが、ごく普通にサーバ証明書ができました。CA証明書はできませんし、サーバ証明書とCA証明書両方の役割を果たす証明書もできませんでした。もしそうなら回答を少し訂正しようかと思ったのですが、訂正の必要はないと思います。

編集 履歴 (7)
  • blunder3さん
    丁寧な解説有難うございます。
    今一番やりたい機能確認は、
    IIS7で自己証明入りサーバー証明書を作成するということです。
    そして、それが理解できたら、
    IIS7でドメインサーバー証明書を作成する
    ということがやりたいです。
    -
  • IISの場合、フレンドリ名を指定するくらいで簡単に自己署名入り証明書ができるみたいです。逆にカスタマイズはできなさそうです。何ができたかを見るには一覧表示で該当する証明書をクリックして中身を表示してみればいいと思います。それでよければ、あとはWebサイトにその証明書を紐づければいいだけではないですか?
    -
  • あれ、すみません、何か勘違いしたかも。両方の役割というのはクライアントでの証明書のインポートというか管理上のイメージの話で、証明書自体の話ではなかったつもりだったんですが、どっちにしてもそれも含めて勘違いしてたかもしれません。 -
  • たしかにIISで自己署名入り証明書を作った後、できたものを表示すると「このCAルート証明書は信頼されていません。信頼を有効にするにはこの証明書を信頼されたルート証明機関のストアにインストールしてください。」と表示されるので、nachaさんのおっしゃることも一理あります。ただ実体はサーバ証明書ですし、ルート証明機関にインストールしてもドメイン名が不一致になるため証明書エラーは出続けました。 -

解説いただいた皆様へ

非常にたくさんの方々にアドバイス・解説いただき感謝しております。
私自身がまだまだ勉強不足な事もあり、色々と混乱している状態です。

一旦、この件につきましては、closeとさせてください。

もう一度、勉強しなおして出直してきます。。。

丁寧な解説をしてくださり有難うございました。

追伸
ベストアンサーをどなたかに決めなければなりませんが、
どなたにあげるべきか・・・・。
もう少し時間を下さい。

編集 履歴 (1)

ちょっとだけ補足します、すでに出てる話も含んでいますが。

CA証明書とサーバ証明書が出てきていますが、クライアント側に事前に入手なりインストールなり配布が必要なのは、CA証明書の方ということです。
サーバ証明書は、SSL/TLSのネゴシエーション時にやりとりされます。

で、ベリサインその他の、信頼されているCAのCA証明書は、最初からマシンやブラウザにインストール済みになっているので、警告なくかつ安全に通信ができます。
自分でたてたCAはそのままでは信頼されていないので、警告が出ます。
CAが信頼されているとは、クライアントの信頼されたルート証明機関として、CA証明書がインストールされているかで判断されます(もっと細かい話はありますが今はザクッと割愛)。

この信頼されたルート証明機関の証明書を配布する方法として、ADのエンタープライズCAであれば自動配布が可能であり、スタンドアロンCAなどであれば手動での明示的な配布が必要になるということです。

最初に質問された、クライアントへの証明書の配布といえば、この信頼されたルート証明機関として登録するための、CA証明書の配布やインストールがそれに当たるということです。

追加で、IISとかで自己署名サーバ証明書を作成した場合は、サーバ証明書とCA証明書両方の役割を果たしているイメージになり、サーバ証明書自体をクライアントの信頼されたルート証明機関の証明書としてインストールすることになります(警告をなくす場合はですが)。

編集 履歴 (1)
  • あ、信頼されたルート証明機関として登録する(証明書をインストールする)というのは非常に重大な操作なので気をつけてくださいね。 -

Windows Serverを認証局にしよう
http://ascii.jp/elem/000/000/533/533755/

Active Directory 証明書サービス
http://surferonwww.info/BlogEngine/post/2012/02/05/Active-Directory-Certificate-Service.aspx

【追記】

必要なのは CA 証明書とサーバー証明書の 2 つで、クライアントが (1) 全員 AD DS のドメイン環境イントラネット内にいる場合でも、(2) インターネット上にいる場合でも、同じです。

ただし、(1) の場合は AD CS を利用できるので、Verisign などの外部証明機関にお金を払って証明書を入手する必要がありません。

質問者さんのレスで「ADDSや証明書をクライアントに配布する場合」と書いてあったので、(1) のケースと理解して上の記事を紹介しました。

ドメインコントローラーに AD CS をエンタープライズ CA としてインストールすれば、CA 証明書は自動的にそのサーバーにインストールされ、さらに、クライアント PC からドメインユーザーアカウントにログオンすると、クライアント PC にも自動的に CA 証明書がインストールされます。

したがって、手動で行わなければならないのは、サーバー証明書の入手と、Web サーバーへのインストールだけです。

AD CS をインストールすると、そのサーバーに IIS もインストールされ、Default Web Site 下に CertSrv という仮想ディレクトリが作成されるので、そこにアクセスしてサーバー証明書を入手し、Web サーバー (IIS) にインストールすれば、接続時に警告を出さない SSL 通信を行うことが可能になります。

サーバー証明書の申請、入手、インストールの詳しい手順は、紹介した記事の後者の方を読んでください。

編集 履歴 (1)

SurferOnWwwさん

回答有難うございます。

『Windows Serverを認証局にしよう』を一通り読みましたが、結局、どの作業をサーバー側で行って、どの作業をクライアント側でやるのかが不明確で理解できません。さらに、証明書をグループポリシーで配布とか、Web登録(Webブラウザ経由で証明書を取得)とか・・・・一体、クライアントはどうやって証明書を取得するのでしょう?

さらに、証明書をグループポリシーで配布するのと、web経由(web登録)で取得するのは、何か違いがあるのでしょうか?

編集 履歴 (0)
  • 解答欄に追記します。 -

blunderさん

ご回答有難うございます。

サーバ証明書はサーバにインストールするものであり、クライアントPCにはインストール(or インポート)しなくてよいです。

了解致しました。

IISでSSLや証明書関連を調べると、ほとんどリンク先の手順しか出てこない状態です。さらにどのようなサイトをみても「自己証明書」と記載されているものばかりです。
ちなみにhttp://www.tama200x.com/blog/?p=786
のサイトでも同じように解説されています。。。。。

ところがリンク先の記載通りに作った証明書は、「ローカルな証明書」ですらなく、そもそも認証局から発行されたものでない擬似的な証明書です。これではSSL/TLSによる暗号化通信はできません。

ということは、いくらhttps://で接続しても暗号化通信はできていないということでしょうか?

とにかく、ADDSや証明書をクライアントに配布する場合など、混乱している状態です。。。

もう少し色々と調べてみます。。。。

編集 履歴 (1)
ウォッチ

この質問への回答やコメントをメールでお知らせします。