Apache 資料一覧

SSLを使用する

2008/5/1更新

対応バージョン: 2.2.8

ApacheでSSLを使用するにはまずWebサーバの証明書を作り、それを設定ファイルで適切に指定することによって行う。

以下、手順を追って説明する。

Webサーバ証明書の秘密鍵生成

まずサーバ証明書の秘密鍵を生成する。

ここではDES3方式(鍵長1024bit)のRSA秘密鍵を生成する。

% openssl genrsa -out server.key -des3 1024
Generating RSA private key, 1024 bit long modulus
.....................++++++
................++++++
e is 65537 (0x10001)
Enter pass phrase: ***** ← 秘密鍵のパスフレーズ
Verifying - Enter pass phrase: ***** ← 秘密鍵のパスフレーズ再入力

% more server.key
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,FC415C455FDE0363

AioXOIFL4FgvSUaMyFuYpiVGojp83KWlK1A48XVFaM10Ax3X1lsKgDgBZWSdLZw8
zkreIWlChvThDYVuG4tG5zqFC8SUkoLX/mt+9oNzLV2ebrY47U0PQ0Q27yvR2L8T
:
k+YTIKnp/iTx537D1WHzA3sFAsB1/3O7H+VDOs1YafIuf4qgkMv/srL7WkPUlFJ9
HlQExJ94R53PwDr3cFAEKYvuVPh9XlmLnHHUXdIBNPo7h+f1yRk+hw==
-----END RSA PRIVATE KEY-----

Webサーバ証明書生成

続いてWebサーバのサーバ証明書を生成する。

まず認証局に提出するCSRファイルを作成する。

% openssl req -new -key server.key -out server.csr
Enter pass phrase for server.key: ***** ← サーバ秘密鍵のパスフレーズ
:
Country Name (2 letter code) [JP]: ← 国名(例:JP) (*) 必須
State or Province Name (full name) []: ← 都道府県名(例:Tokyo)
Locality Name (eg, city) []: ← 区市町村名(例:Chiyoda)
Organization Name (eg, company) [Private]: ← 組織名/会社名
Organizational Unit Name (eg, section) []: ← 部署名
Common Name (eg, YOUR name) []: ← 組織の通称 (*) 必須 ... httpd.confのServerNameと合わせる
Email Address []: ← メールアドレス

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: ← リターン
An optional company name []: ← リターン

% more server.csr
-----BEGIN CERTIFICATE-----
MIICczCCAdwCCQDwtET0MG5A7zANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJK
UDEOMAwGA1UECBMFQ2hpYmExEDAOBgNVBAcTB0thc2hpd2ExEDAOBgNVBAoTB1By
:
keXTG6HtQwBLuHsXJdaYCOcJCNsxnMAVwziZX4eA8VcQn7+qjjx1JtvQAW80PUGl
eaR9sd0HfA==
-----END CERTIFICATE-----

CSRファイルが作成できたらそれを認証局に署名してもらう。

ここではテスト用としてプライベート認証局を利用してセルフサインを行う。

証明書の有効期間は365日とする。

% openssl x509 -in server.csr -days 365 -req -signkey server.key -out server.crt
Signature ok
subject=/C=JP/ST=Tokyo/L=Chiyoda/O=Private/CN=Private Web Service/emailAddress=www@private.jp
Getting Private key
Enter pass phrase for server.key: ***** ← サーバ秘密鍵のパスフレーズ

% more server.crt
-----BEGIN CERTIFICATE-----
MIICczCCAdwCCQDwtET0MG5A7zANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJK
UDEOMAwGA1UECBMFQ2hpYmExEDAOBgNVBAcTB0thc2hpd2ExEDAOBgNVBAoTB1By
:
keXTG6HtQwBLuHsXJdaYCOcJCNsxnMAVwziZX4eA8VcQn7+qjjx1JtvQAW80PUGl
eaR9sd0HfA==
-----END CERTIFICATE-----

関連資料・記事

Apacheの設定変更

SSLの設定は通常のhttpd.confからSSL専用の設定ファイルをincludeして使用する形になるのでまずhttpd.confの以下のコメントを外す。

#Include conf/extra/httpd-ssl.conf

次にhttpd-ssl.confを編集し、サーバ証明書の格納パスなどを適切に設定する。

:
SSLCertificateFile "/usr/local/apache2/conf/server.crt" ← サーバ証明書
:
SSLCertificateKeyFile "/usr/local/apache2/conf/server.key" ← サーバ証明書の秘密鍵
:

その他のSSL関連設定については基本的にデフォルトのままでよいが必要に応じて変更する。また一般的な設定については通常のhttpd.confと同じなのでここでは割愛する。

関連資料・記事

上記パスにサーバ証明書/秘密鍵を置く。

% sudo cp server.crt server.key /usr/local/apache2/conf

サーバ起動

設定が終わったらサーバを起動する。

% sudo service apache start

通常はサーバ起動時にパスフレーズの入力を求められるが、これを省略して自動起動させたい場合は多少セキュリティに難があるが以下のようにサーバ証明書の秘密鍵からパスフレーズを削除すればよい。

% mv server.key server.key.org
% openssl rsa -in server.key.org -out server.key
Enter pass phrase for server.key.org: ← サーバ証明書秘密鍵のパスフレーズ
writing RSA key

確認

Webブラウザで「https://〜」としてアクセスできればOKである。