Archive for the ‘IIS’ Category

12月
29

Web開発をしているといつも気になる事があるのですが、Webサーバーにはサーバー証明書が導入されているのでアクセスするときにはhttpsプロトコルで通信するのに、自分の使っているパソコン(以降、ローカル環境)にWebサーバーと同様の環境を作ってテストする時はサーバー証明書を導入していないのでhttpプロトコルで通信していますよね?
自分もローカル環境でテストする時はhttpプロトコルで確認している一人なんですけど、どうせならローカル環境でテストする時もhttpsプロトコルで通信したいと思い、ローカル環境のIISにOpenSSLでサーバー証明書を作って導入してみる事にしました。

今回、確認した環境はWindowsXP Pro SP3のIIS5.1です。

■全体の作業手順

 1.OpenSSL、Visual C++ 2008 Redistributables、ActivePerlの
   ダウンロード
 2.ActivePerl、Visual C++ 2008 Redistributables、OpenSSLの
   インストール
 3.IISのサーバー証明書要求作成
 4.OpenSSLの設定ファイル編集およびサーバー証明書作成準備
 5.認証局の秘密鍵作成
 6.認証局の証明書作成
 7.認証局の証明書をDER形式バイナリエンコード(ブラウザインポート用)
 8.IISのサーバー証明書要求に署名
 9.IISにサーバー証明書インストール
10.ブラウザにDER形式認証局の証明書インポート

1.OpenSSL、Visual C++ 2008 Redistributables、ActivePerlのダウンロード
まずShining Light Productions – Win32 OpenSSLのページから
32bit版OpenSSL
Visual C++ 2008 Redistributables
をダウンロードします。
※Visual C++ 2008 Redistributables はMicrosoftのサイトに遷移しますのでそちらからダウンロードしてください
あとActivePerlが必要なので、ActiveStateのサイトからActivePerl-5.10.0.1004-MSWin32-x86-287188.msiをダウンロードします。

2.OpenSSL、Visual C++ 2008 Redistributables、ActivePerlのインストール
Active Perlからインストールします。
インストール手順は以前ご紹介したflashcast:フリーで働くITエンジニア集団のブログ: サイボウズのスケジュールをWindows Mobile(Advanced/W-ZERO3 [es])に自動同期するを参考にしてください。

次にVisual C++ 2008 Redistributables をインストールします。
ダウンロードしたvcredist_x86.exeをダブルクリックします。
セキュリティ警告ダイアログが表示されます。[実行]ボタンをクリックします。

インストール画面が表示されるので、[Next>]ボタンをクリックします。

「I have read and accept the license terms.」にチェックをして[Install>]ボタンをクリックします。

インストールが終了したら[Finish]ボタンをクリックします。

続いてOpenSSLをインストールします。
ダウンロードしたWin32OpenSSL-0_9_8i.exeをダブルクリックします。
セキュリティ警告ダイアログが表示されます。[実行]ボタンをクリックします。

インストール画面が表示されるので、[Next>]ボタンをクリックします。

「I accept the agreement」にチェックをして[Next>]ボタンをクリックします。

インストールフォルダを指定します。
デフォルトのまま(C:¥OpenSSL)[Next>]ボタンをクリックします。

スタートメニューに登録するときの名前を指定します。
デフォルトのまま(OpenSSL)[Next>]ボタンをクリックします。

OpenSSL DLLのインストール先を指定します。
デフォルトは「The Windows system directory」なのですが、ここでは「The OpenSSL binaries [/bin] directory」を選択して[Next>]ボタンをクリックします。

インストールオプションの確認をして[Install]ボタンをクリックします。

インストールが完了したら[Finish]ボタンをクリックします。

3.IISのサーバー証明書要求作成
スタートアップメニューの[スタート]-[プログラム]-[管理ツール]-[インターネット インフォメーション サービス]を選択してインターネットインフォメーションサービスの管理画面を起動します。
もしくは[スタート]-[設定]-[コントロールパネル]-[管理ツール]-[インターネット インフォメーション サービス]を選択してインターネットインフォメーションサービスの管理画面を起動します。
もしインターネットインフォメーションサービスがない場合は、コントロールパネルの[プログラムの追加と削除]から[Windowsコンポーネントの追加と削除]を選び、インターネットインフォメーションサービスをインストールしてください。
インターネットインフォメーションサービスの管理画面が起動したら、左ペインにあるツリーを[インターネットインフォメーションサービス]-[コンピュータ名(実際のコンピュータ名)]-[Web サイト]-[規定の Web サイト]の順番で展開していきます。

規定のWebサイトのプロパティ画面が開いたら、「ディレクトリ セキュリティ」タグを選択して、[サーバー証明書]ボタンをクリックします。

サーバー証明書ウィザードが起動するので、[次へ(N)>]ボタンをクリックします。

「証明書の新規作成」を選択して[次へ(N)>]ボタンをクリックします。

「証明書の要求を作成して後で送信する」を選択して[次へ(N)>]ボタンをクリックします。

証明書の登録名とビット長の指定をします。
デフォルトのままで[次へ(N)>]ボタンをクリックします。

組織と部門名を入力します。
ここでは組織を「yasu corp」、部門を「system」として[次へ(N)>]ボタンをクリックします。

一般名を入力します。
ここでは「yasu」として[次へ(N)>]ボタンをクリックします。
※この一般名にはWebページにアクセスするときに指定するFQDN(完全修飾ドメイン名)を入力するようにしてください。
(https://FQDN(完全修飾ドメイン名)/...)
もしくはここで入力した一般名でローカルPCのIPアドレスを逆引きできるようにDNSやhostsファイルを設定するようにしてください。
なぜか?は最後にネタ明かしします。

国を選択、都道府県と市区町村を入力します。
ここでは国を「JP(日本)」、都道府県を「tokyo」、市区町村を「koutouku」として[次へ(N)>]ボタンをクリックします。

証明書の要求ファイル名を指定します。
ここでは「C:\certreq.txt」として[次へ(N)>]ボタンをクリックします。

入力内容を確認して[次へ(N)>]ボタンをクリックします。

ウィザードが完了したら[完了]ボタンをクリックします。

4.OpenSSLの設定ファイル編集およびサーバー証明書作成準備
環境変数のPathに以下のパスを追加します。
C:\OpenSSL\;C:\OpenSSL\bin\;

サーバー証明書作成用作業フォルダを作成します。
ここでは C:\OpenSSL\bin\PEM\yasu というフォルダを作成します。

OpenSSLの設定ファイルを編集します。
C:\OpenSSL\bin直下にopenssl.cfgファイルがあるので、それをC:\OpenSSL\bin\PEM\yasuにコピーします。

C:\OpenSSL\bin\PEM\yasu\openssl.cfgファイルをメモ帳などテキストエディタで開き、以下の箇所を修正します。
■修正前

[37~39行目]
dir = ./demoCA # Where everything is kept
certs = $dir/certs # Where the issued certs are kept
crl_dir = $dir/crl # Where the issued crl are kept
[43行目]
new_certs_dir = $dir/newcerts # default place for new certs.
[50~51行目]
private_key = $dir/private/cakey.pem# The private key
RANDFILE = $dir/private/.rand # private random number file

■修正後

[37~39行目]
dir = . # Where everything is kept
certs = $dir # Where the issued certs are kept
crl_dir = $dir # Where the issued crl are kept
[43行目]
new_certs_dir = $dir # default place for new certs.
[50~51行目]
private_key = $dir/cakey.pem# The private key
RANDFILE = $dir/.rand # private random number file

C:\OpenSSL\bin\PEM\yasu に中身が空っぽのテキストファイル index.txt と01と書いた serial ファイルを作成します。
■index.txt のイメージ(空っぽです)

■serial のイメージ

手順3.IISのサーバー証明書要求作成で作成したサーバー証明書要求ファイル C:\certreq.txt をC:\OpenSSL\bin\PEM\yasu フォルダに移動します。

C:\OpenSSL\bin\PEM\yasu フォルダには

certreq.txt
index.txt
openssl.cfg
serial

の4つのファイルが保存されているはずです。

5.認証局の秘密鍵作成
スタートアップメニューの[ファイル名を指定して実行(R)]を選択し、cmd と入力して[OK]ボタンをクリックします。
コマンドプロンプトが起動しますので、認証局の秘密鍵を作成します。

 cd \OpenSSL\bin\PEM\yasu
 openssl genrsa -out .\cakey.pem 1024
 Loading ’screen’ into random state – done
 Generating RSA private key, 1024 bit long modulus
 ……………………………………………………………++++++
 ………………….++++++
 e is 65537 (0×10001)

これでC:\OpenSSL\bin\PEM\yasu フォルダにはcakey.pemというファイルが作成されましたね。
これが認証局の秘密鍵になります。

6.認証局の証明書作成
認証局の証明書を作成します。

 openssl req -new -x509 -config .\openssl.cfg -key .\cakey.pem -out .\cacert.pem
 Loading ’screen’ into random state – done
 You are about to be asked to enter information that will be incorporated
 into your certificate request.
 What you are about to enter is what is called a Distinguished Name or a DN.
 There are quite a few fields but you can leave some blank
 For some fields there will be a default value,
 If you enter ‘.’, the field will be left blank.
 —–
 Country Name (2 letter code) [AU]:JP
 State or Province Name (full name) [Some-State]:tokyo
 Locality Name (eg, city) []:koutouku
 Organization Name (eg, company) [Internet Widgits Pty Ltd]:yasu corp
 Organizational Unit Name (eg, section) []:system
 Common Name (eg, YOUR name) []:yasu
 Email Address []:

cacert.pem というファイルが作成されました。

7.認証局の証明書をDER形式バイナリエンコード(ブラウザインポート用)
手順6で作成した認証局の証明書をブラウザにインポートする為、DER形式にバイナリエンコードします。

 openssl x509 -inform pem -outform der -in .\cacert.pem -out ca.der

ca.der というファイルが作成されました。
手順10で使うのでそれまで大切に保管してください。

8.IISのサーバー証明書要求に署名
IISの証明書要求ウィザードで出力したファイルに署名を行い、サーバー証明書を作成します。

 openssl ca -config .\openssl.cfg -days 3650 -out .\server_.cer -infiles .\certreq.txt
 Using configuration from .\openssl.cfg
 Loading ’screen’ into random state – done
 Check that the request matches the signature
 Signature ok
 Certificate Details:
    Serial Number: 1 (0×1)
    Validity
      Not Before: Dec 26 08:08:00 2008 GMT
      Not After : Dec 24 08:08:00 2018 GMT
    Subject:
      countryName = JP
      stateOrProvinceName = tokyo
      organizationName = yasu corp
      organizationalUnitName = system
      commonName = yasu
    X509v3 extensions:
      X509v3 Basic Constraints:
        CA:FALSE
      Netscape Comment:
        OpenSSL Generated Certificate
      X509v3 Subject Key Identifier:
        86:2A:62:50:DE:54:CE:CA:72:5C:8B:55:ED:DA:FE:AD:0D:74:80:21
      X509v3 Authority Key Identifier:
        keyid:4D:0B:4E:34:FB:81:88:5F:40:9F:18:0A:26:EA:44:9F:F6:DD:B4:F6

 Certificate is to be certified until Dec 24 08:08:00 2018 GMT (3650 days)
 Sign the certificate? [y/n]:y

 1 out of 1 certificate requests certified, commit? [y/n]y
 Write out database with 1 new entries
 Data Base Updated

 openssl x509 -in .\server_.cer -out .\server.cer

以下7ファイル作成されました。

server_.cer
.rnd
01.pem
index.txt.attr
index.txt.old
serial.old
server.cer

server.cer ファイルがIISにインストールするサーバー証明書ファイルになります。

9.IISにサーバー証明書インストール
手順3同様、インターネットインフォメーションサービスの管理画面から規定のWebサイトのプロパティ画面を開き、「ディレクトリ セキュリティ」タグを選択して、[サーバー証明書]ボタンをクリックします。

サーバー証明書ウィザードが起動するので[次へ(N)>]ボタンをクリックします。

「保留中の要求を処理し、証明書をインストールする(P)」を選択して[次へ(N)>]ボタンをクリックします。

サーバー証明書ファイルを入力します。
[参照]ボタンをクリックしてC:\OpenSSL\bin\PEM\yasu\server.cer ファイルを選択し、[次へ(N)>]ボタンをクリックします。

証明書の内容を確認して[次へ(N)>]ボタンをクリックします。

ウィザードが完了したら[完了]ボタンをクリックします。

これでIISにSSLを導入する事ができました。

10.ブラウザにDER形式認証局の証明書インポート
このままだとhttpsプロトコルでページアクセスする度にセキュリティ警告

が表示されてしまうので、手順7で作成した証明書をクライアント側にインポートしてセキュリティ警告が表示されないようにします。

手順7で作成したca.der ファイルを選択して右クリックし、[証明書のインストール]を選択します。
すると証明書インポートウィザードが起動するので[次へ(N)>]ボタンをクリックします。

「証明書をすべて次のストアに配置する(P)」を選択し、[参照]ボタンから「信頼されたルート証明機関」を選択して[次へ(N)>]ボタンをクリックします。

[完了]ボタンをクリックします。

証明書をインストールしようとするとセキュリティ警告が表示されますが、[はい(Y)]ボタンをクリックします。

[OK]ボタンをクリックします。

これでhttpsプロトコルでローカル環境のWebページにアクセスしてもセキュリティ警告が表示されなくなります。
試しに規定のWebサイトのホームディレクトリ直下に適当なテストページを作り、ブラウザのアドレスに「https://yasu/test.html」のような形でアクセスしたところセキュリティ警告が表示されずにhttpsプロトコルでアクセスできるようになりました。
※最初ブラウザに証明書をインポートした後、セキュリティ警告が表示されない事を確認する為に「https://localhost/test.html」のようにFQDN(完全修飾ドメイン名)をlocalhostでやっていたのですが、何度やっても警告が表示されてしまいました。証明書のストア先を変更したりして試してもダメで途方にくれていたのですが、まさかの手順3.IISのサーバー証明書要求作成のところで入力した「一般名」にFQDN(完全修飾ドメイン名)を入力する必要がある事を知らずに全然別の適当な名前を入力していたのでアクセスしたページのFQDN(完全修飾ドメイン名)が信頼されておらずセキュリティ警告が出続けていました。
いやぁ、これで1時間近くはまったはまった・・・(汗

また今回はこちらのページに非常にお世話になりました。
IIS + OpenSSL:.knowledge – frog.raindrop.jp

WindowsXPで試しましたが、Windows2000、WindowsServer2003、WindowsVista、WindowsServer2008のIISでもサーバー証明書要求ファイルを作り、OpenSSLでサーバー証明書を作ってインストールすれば、IISのWebページにhttpsプロトコルでアクセスできると思います。
またOpenSSLは今回Windows用のものをダウンロード・インストールして使いましたが、OpenSSLはマルチプラットフォーム対応(LinuxやSolaris、Macなど)されていますので手順5〜8までは他OSのOpenSSLでも代用できると思います。

ローカル環境にセキュアなWebサーバ環境を安く構築したい時にとっても有効です。
ちょっと手順が長いですけど頑張って導入してみてください。

  • Search:
  • flashcastとは?

    東京を中心に、現在フリーランスとして活動しているITエンジニア、および、かつてフリーランスとして活動していた起業家達が立ち上げたコミュニティーです。

    みんなで集まって面白いことをやろう!形に残そう!ということで、ブログをはじめました。

    技術情報や、フリーエンジニアに役立つ情報などを、ご紹介できたらと思っています。

    お問い合わせ:
    info@flashcast.jp
  • カレンダー

    2010年7月
    日曜日 月曜日 火曜日 水曜日 木曜日 金曜日 土曜日
    « 6月    
     123
    45678910
    11121314151617
    18192021222324
    25262728293031
  • メンバー紹介

    もじゃもじゃ
    flashcastのリーダー

    3年ほどフリーのITエンジニアとして活動。現在は、社員2名の株式会社を経営しています。

    一攫千金を夢見る野心家です。

    ライブキャスト

    yasu
    ダイバー

    自宅サーバーでホームページを作り始めました。

    少しずつ記事を増やしていきますので足を運んでください。

    よろしくお願いします。

    sa-sa-ki.jp

    のら
    たびびと

    ねこ好きに悪人はいなーいっ!!

    バイクや車も好きです。

    めぐ
    デザイナーのたまご

    音楽とデザインとお酒をこよなく愛する永遠のダイエッター。

    現在ペンタブレットでイラストを勉強中。

    Hiro
    コンサル

    PMやSEの案件を業務委託で請けることが多いですが、小規模案件も受託でやっています。

    得意な分野はマイクロソフト製品や関連技術によるシステム構築です。

    KEI
    取締役の風格

    最年少なのに、メンバーで1番の貫禄の持ち主!?

    C#や.netなどサーバ側の開発が得意。

    ろっきー
    美食家★パパ

    自分にとっての息抜きは、ドライブして温泉に入って、美味しいご飯を食べる事。

    ココロとカラダのリフレッシュを大切にし、日々の仕事に励む一児の父親です。

    郵便番号検索

    my-hobby

    とのさま
    げーむのおうさま

    大人なのに好きなことしかやらない駄目人間。

    Web系が得意、アクセスは苦手><

    tonosamart.com

    セクレタリアト
    ギャンブラー

    フリーランス時代は仲間の現場を探すことが多く、それをきっかけに会社を設立。

    現在はSI業に特化せず、他の業種にも興味を持ち始めています。

    メドレー株式会社

  • 広告