Pocket

apache 2.4系 SSL自己証明書の導入方法

  • add this entry to hatena bookmark

Webシステムで暗号化は必要要件だが、第3者機関が有料で発行するSSL証明書を利用しなくても良い、というケースがあるかと思います。

例えば、自社用途のみのWebシステムで、まだ利用者数が少ないケースなどでは、SSL自己証明書で事足りる場合があります。

ただし、SSL自己証明書では、ブラウザでアクセスすると以下のようになります。(Chrome の場合)

self-ssl

これが許容できれば良いわけですが、前述のとおり、Webシステムでは自社用途ぐらいに限られるかと思います。

ここでは、apache 2.4系 でのSSL自己証明書の導入方法を記載しています。

はじめに

使っているapacheのバージョンは、2.4.7 です。2.4系であれば変わらないのではないかと思います。

sourceからインストールする場合、configureオプションで「–enable-ssl」が必要です。

以下、手順としては以下のような概要になります。

  1. 秘密鍵(Private Key)の作成
  2. 公開鍵(CSR)の作成
  3. サーバー証明書(CRT)の作成
  4. httpd設定ファイルの編集

それぞれ、コマンドラインでの作業です。

1.秘密鍵(Private Key)の作成

まず、秘密鍵として、server.key を作成します。
以下では2048bitで作成しています。
パスフレーズを設定します。

# mkdir ssl.key
# chmod 700 ssl.key
# /usr/bin/openssl genrsa -aes128 2048 > ssl.key/server.key
Generating RSA private key, 2048 bit long modulus
..........................................................+++
...........+++
e is 65537 (0x10001)
Enter pass phrase:
Verifying - Enter pass phrase:
#

以降でも、ここで設定したパスフレーズを使いますので、忘れないようにしましょう。

2.公開鍵(CSR)の作成

次に、公開鍵として、server.csr を作成します。
先ほど作成した秘密鍵を利用します。
自己証明書なので、入力する項目はあまり厳密に気にする必要はないかと思います。

# mkdir ssl.csr
# chmod 700 ssl.csr
# /usr/bin/openssl req -new -key ssl.key/server.key > ssl.csr/server.csr
Enter pass phrase for ssl.key/server.key:
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) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:Chuo-ku
Organization Name (eg, company) [Default Company Ltd]:HogeHoge Inc.
Organizational Unit Name (eg, section) []:Sales
Common Name (eg, your name or your server's hostname) []:ssl.hogehoge.jp
Email Address []:

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

上で記載している入力項目はサンプルですので、そのまま利用しないでくださいな。

3.サーバー証明書(CRT)の作成

次にサーバー証明書として、server.crt を作成します。

ここでも、秘密鍵で設定したパスフレーズを入力します。

# mkdir ssl.crt
# chmod 700 ssl.crt
# /usr/bin/openssl x509 -in ssl.csr/server.csr -days 365 -req -signkey ssl.key/server.key  > ssl.crt/server.crt
Signature ok
subject=/C=JP/ST=Tokyo/L=Chuo-ku/O=HogeHoge Inc./OU=Sales/CN=ssl.hogehoge.jp
Getting Private key
Enter pass phrase for ssl.key/server.key:
#

以上で、ファイル作成作業は終わりです。

次にhttpd設定ファイルの編集を行います。

4.httpd設定ファイルの編集

まず、httpd.conf を編集してから、extra/httpd-ssl.conf を作成する事にします。

httpd.conf でのSSL用の設定は以下にしました。

LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule ssl_module modules/mod_ssl.so

Include conf/extra/httpd-ssl.conf

<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

次に、extraディレクトリ内にある(なければ作成)「httpd-ssl.conf」の設定内容(サンプル)は以下になります。
各ファイルのパスは、ご自身の環境に合わせて編集してください。

Listen 443
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
SSLPassPhraseDialog  builtin
SSLSessionCache        "shmcb:/usr/local/apache2/logs/ssl_scache(512000)"
SSLSessionCacheTimeout  300

<VirtualHost _default_:443>
  DocumentRoot "/usr/local/apache2/htdocs"
  ServerName ssl.hogehoge.jp:443
  ServerAdmin admin@hogehoge.jp
  ErrorLog "/usr/local/apache2/logs/error_log"
  TransferLog "/usr/local/apache2/logs/access_log"
  SSLEngine on
  SSLCertificateFile "/usr/local/apache2/conf/ssl.crt/server.crt"
  SSLCertificateKeyFile "/usr/local/apache2/conf/ssl.key/server.key"

  <FilesMatch "\.(cgi|shtml|phtml|php)$">
      SSLOptions +StdEnvVars
  </FilesMatch>
  <Directory "/usr/local/apache2/cgi-bin">
      SSLOptions +StdEnvVars
  </Directory>

  BrowserMatch "MSIE [2-5]" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

  CustomLog "/usr/local/apache2/logs/ssl_request_log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

</VirtualHost>

設定が済んだら、apache を再起動します。
apache を起動するときに、秘密鍵で設定したパスフレーズの入力を求められると思います。

備考:apache起動時のパスフレーズ入力を無くす方法

apacheを起動するたびにパスフレーズを入力するのは手間だったり、オペレーション自動化の際にネックになったりします。

以下は、パスフレーズの入力を無くす方法です。

# cd ssl.key/
# mv server.key server.key.backup
# /usr/bin/openssl rsa -in server.key.backup > server.key
Enter pass phrase for server.key.backup:
writing RSA key
# ls -1
server.key
server.key.backup
#

以上で、apache起動時にパスフレーズは求められなくなります。

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

チェックサイト RSS Feed読者登録はいかがでしょうか?RSS配信中です。