Webシステムで暗号化は必要要件だが、第3者機関が有料で発行するSSL証明書を利用しなくても良い、というケースがあるかと思います。
例えば、自社用途のみのWebシステムで、まだ利用者数が少ないケースなどでは、SSL自己証明書で事足りる場合があります。
ただし、SSL自己証明書では、ブラウザでアクセスすると以下のようになります。(Chrome の場合)
これが許容できれば良いわけですが、前述のとおり、Webシステムでは自社用途ぐらいに限られるかと思います。
ここでは、apache 2.4系 でのSSL自己証明書の導入方法を記載しています。
はじめに
使っているapacheのバージョンは、2.4.7 です。2.4系であれば変わらないのではないかと思います。
sourceからインストールする場合、configureオプションで「–enable-ssl」が必要です。
以下、手順としては以下のような概要になります。
- 秘密鍵(Private Key)の作成
- 公開鍵(CSR)の作成
- サーバー証明書(CRT)の作成
- 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起動時にパスフレーズは求められなくなります。