Windows Server 2003 による Active Directory 環境下で Linux サーバを運用していると、Linux で構築した認証局 (CA) ではなく、Windows Server 2003 の「認証機関」(CA とします) にサーバ証明書をリクエストしたくなる時があります。

「Linux 用の証明書なら Linux で openssl をインストールして発行すれば?」
と思うかもしれません。SSL サーバ証明書を年額払って購入するは別として、自前の Linux サーバで発行した場合、「オレオレ証明書」を受け取った IE7 に「証明書のエラー」と言われ赤く表示されたり、Windows メール (Outlook Express) から Linux ディストリビューションな POP3s / IMAPs サーバに「このサーバーを使用し続けますか?」と言われギョッとすることがあります。

このサーバーを使用し続けますか?

Windows Server 2003 の CA を使うと、ルートCA の証明書が Active Directory により配布されるために、クライアント PC が AD ドメインに参加していれば、これらのメッセージを見なくても済むわけです。

準備

  • Linux 側に OpenSSL をインストール (ここでは CentOS5.1 とします)
  • Windows 2003 Server 側に「証明書サービス CA」「証明書サービス Web 登録のサポート」をインストール

OpenSSL でサーバ証明書リクエストを発行する

  • /bin/su –
  • cd /etc/pki/tls/certs
  • make server.key
  • openssl -in server.key -out server.key
  • make server.csr
    (いくつか質問されますが、Common Name は Linux サーバの FQDN である必要があります。 e.g. www.yourdomain.co.jp )

これで CSR ファイルができます。

Windows Server 2003 証明機関で証明書を発行する

  • Web 管理ツールを開く証明書サービスの Web 登録サポート
  • [証明書を要求する] をクリック
  • [証明書の要求の詳細設定] をクリック
  • [Base64 エンコード CMC または PKCS #10 ファイルを使用して証明書の要求を送信する…] をクリック
  • [Base64 エンコード証明書要求] の欄に server.csr の内容をメモ帳などで開き、コピー & ペーストする
  • [証明書テンプレート] を [Web サーバー] にする
  • [送信] ボタンをクリック
  • Base 64 形式を選択し、証明書ファイル (certnew.cer) をダウンロード

OpenSSL 側でサーバ証明書をセットアップ

  • 受け取ったファイルを /etc/pki/tls/certs に置いたとする
  • cd /etc/pki/tls/certs
  • chmod 400 server.key server.cer
  • rm -f server.csr

あとは、証明書を使用する側のアプリケーション (e.g. apache) から、

  • 秘密鍵 server.key
  • 公開鍵 server.cer

を参照するように設定します。