※本記事は、旧ブログからの再掲です。
MacにSSLサーバーの環境を構築したので、そのときの手順を備忘録として残しておきます。
<手順>
(1)作業ディレクトリの作成
(2)乱数データの作成
(3)サーバー鍵の作成
(4)CSRの作成
(5)CAの鍵の作成
(6)CA証明書の作成
(7)サーバー証明書の作成
(8)/etc/apache2に配置
(9)パスフレーズの削除
(10)アクセス権の変更
(11)httpd.confの設定変更
(12)httpd-ssl.confの設定変更
(13)コンフィグファイルの文法チェック
(14)Apache再起動
※環境
OS:Mac OS X 10.8.2
作業前に |
0-1. Apacheの停止
作業を始める前にApacheを停止しておきます。
ターミナル上で下記コマンドを実行します。
# sudo apachectl stop
0-2. sign.shの取得
1-7で使用するsign.shをmod_sslから予め取得しておきます。
# curl -O http://www.modssl.org/source/mod_ssl-2.8.31-1.3.41.tar.gz
# tar xvfz mod_ssl-2.8.31-1.3.41.tar.gz
pkg.contribディレクトリ配下にあるsign.shを1-7で使用します。
作業ディレクトリ上で証明書を作成 |
1-1. 作業ディレクトリの作成
作業用にデスクトップ上にディレクトリを作成します。ディレクトリ名は任意です。
以下の例では SSLKey というディレクトリを作成しています。
# cd ~/Desktop
# mkdir SSLKey
1-2. 乱数データの作成
乱数の種になるデータファイルを作成します。
# cd /
# openssl md5 * > ~/Desktop/SSLKey/rand.dat
読み込みエラーが表示されますが、無視してOKです。
Read Error in Applications 656:error:0200B015:system library:fread:Is a directory:/SourceCache/OpenSSL098/OpenSSL098-47/src/crypto/bio/bss_file.c:202: ~以下略~ |
作成されたrand.datの内容です。
Read MD5(dev)= 402da6fd7f1777c69b7f11f961553c0c MD5(mach_kernel)= 226c6548c618966c7eca12f7fddcf93d ~以下略~ |
1-3. サーバー鍵の作成
RSAの秘密鍵(server.key)を作成します。
# cd ~/Desktop/SSLKey
# openssl genrsa -des3 -out server.key -rand rand.dat 1024
94 semi-random bytes loaded Generating RSA private key, 1024 bit long modulus ………….++++++ ………………..++++++ e is 65537 (0x10001) Enter pass phrase for server.key:パスフレーズを入力 Verifying – Enter pass phrase for server.key:もう一度、パスフレーズを入力 |
1-4. CSRの作成
CSR(server.csr)を作成します。
パスフレーズには、1-3で入力したものと同じものを入力します。
Common Nameには、SSL接続の際のURLを入力しますが、テスト用の場合には127.0.0.1を入力します。
※CSR(Certificate Signing Request)とは、SSLサーバー証明書を申請・取得するために認証局へ提出する証明書署名要求のことです。通常、証明書はベリサイン等で認証し署名を行い発行されますが、今回はテスト用なので、自分が認証局(Certificate Authority)になります。
# openssl req -new -key server.key -out server.csr
Enter pass phrase for 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) [AU]:JP State or Province Name (full name) [Some-State]:Toyko Locality Name (eg, city) []:Chuo-ku Organization Name (eg, company) [Internet Widgits Pty Ltd]:ABC company Organizational Unit Name (eg, section) []:Customer Service Common Name (eg, YOUR name) []:127.0.0.1 Email Address []:sample@example.com Please enter the following ‘extra’ attributes to be sent with your certificate request A challenge password []: An optional company name []: |
1-5. CAの鍵の作成
認証局(CA)の鍵(ca.key)を作成します。
※ベリサイン等の認証機関に依頼する場合には1-5と1-6の作業は不要となります。今回は自分が認証局となるので作成します。
# openssl genrsa -des3 -out ca.key -rand rand.dat 1024
94 semi-random bytes loaded Generating RSA private key, 1024 bit long modulus ……………………………..++++++ ..++++++ e is 65537 (0x10001) Enter pass phrase for ca.key:パスフレーズを入力 Verifying – Enter pass phrase for ca.key:もう一度、パスフレーズを入力 |
1-6. CA証明書の作成
CAの証明書(ca.crt)を作成します。
パスフレーズには、1-5で入力したものと同じものを入力します。
Common Nameには、自分の名前を入力します。
# openssl req -new -x509 -days 365 -key ca.key -out ca.crt
Enter pass phrase for ca.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) [AU]:JP State or Province Name (full name) [Some-State]:Toyko Locality Name (eg, city) []:Chuo-ku Organization Name (eg, company) [Internet Widgits Pty Ltd]:CA company Organizational Unit Name (eg, section) []:CA Service Common Name (eg, YOUR name) []:Yamada Hanako Email Address []:sample@example.com |
1-7. サーバー証明書の作成
CAとして署名し、サーバー証明書を作成します。
※ 0-2で取得しておいたsign.shを作業ディレクトリ配下にコピーしてきて、それを実行します。
# ./sign.sh server.csr
CA signing: server.csr -> server.crt: Using configuration from ca.config Enter pass phrase for ./ca.key:パスフレーズを入力 Check that the request matches the signature Signature ok The Subject’s Distinguished Name is as follows countryName :PRINTABLE:’JP’ stateOrProvinceName :PRINTABLE:’Tokyo’ localityName :PRINTABLE:’Chuo-ku’ organizationName :PRINTABLE:’ABC company’ organizationalUnitName:PRINTABLE:’Customer Service’ commonName :PRINTABLE:’127.0.0.1′ emailAddress :IA5STRING:’sample@example.com’ Certificate is to be certified until Feb 18 11:48:06 2014 GMT (365 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 CA verifying: server.crt CA cert server.crt: OK |
/etc/apache2に配置 |
2-1. /etc/apache2に配置
/etc/apache2配下に新規にssl.keyというディレクトリを作成し、作業ディレクトリで作成したファイルをコピーします。
# cd /etc/apache2
# sudo mkdir ssl.key
# cd ssl.key
# sudo cp -r ~/Desktop/SSLKey/* .
# ls -l
-rw-r–r– 1 root wheel 1322 2 18 21:05 ca.crt drwxr-xr-x 3 root wheel 102 2 18 21:05 ca.db.certs -rw-r–r– 1 root wheel 126 2 18 21:05 ca.db.index -rw-r–r– 1 root wheel 21 2 18 21:05 ca.db.index.attr -rw-r–r– 1 root wheel 3 2 18 21:05 ca.db.serial -rw-r–r– 1 root wheel 963 2 18 21:05 ca.key -rw-r–r– 1 root wheel 94 2 18 21:05 rand.dat -rw-r–r– 1 root wheel 2713 2 18 21:05 server.crt -rw-r–r– 1 root wheel 708 2 18 21:05 server.csr -rw-r–r– 1 root wheel 951 2 18 21:05 server.key -rwxr-xr-x 1 root wheel 1784 2 18 21:05 sign.sh |
2-2. パスフレーズの削除
server.keyの暗号化を解除して、起動時のパスフレーズ要求を削除します。
これを行うとApacheの自動起動ができるようになります。
※これはテスト用のためなので、本来はセキュリティ上危険のため削除しないでください。
# sudo cp server.key server.key.original
# sudo openssl rsa -in server.key.original -out server.key
Enter pass phrase for server.key.original:パスフレーズを入力 writing RSA key |
2-3. アクセス権の変更
作成したファイルのアクセス権を変更します。
# sudo chmod -R 400 server.* ca.* rand.dat
コンフィグファイルの設定変更 |
3-1. httpd.confファイルの設定変更
/etc/apache2/httpd.confの設定を変更します。
# cd /etc/apache2
# sudo cp httpd.conf httpd.conf.backup
# sudo vi httpd.conf
LoadModule ssl_module libexec/apache2/mod_ssl.so LoadModule socache_shmcb_module libexec/apache2/mod_socache_shmcb.so ServerName 127.0.0.1:80 Include /private/etc/apache2/extra/httpd-ssl.conf |
コメントアウトされている場合には、先頭の# を取り除きます。
ServerNameは、テスト用に127.0.0.1:80を設定しています。
※2014/11/10 追記
socache_shmcb_moduleも追加で有効にする必要があります。
(4.1のconfigtestでエラーが発生します。)
3-2. httpd-ssl.confの設定変更
/etc/apache2/extra/httpd-ssl.confも設定を変更します。
# cd extra
# sudo cp httpd-ssl.conf httpd-ssl.conf.backup
# sudo vi httpd-ssl.conf
SSLCertificateFile, SSLCertificateKeyFileのディレクトリを実際のディレクトリに変更します。
ServerNameは、テスト用に127.0.0.1:443を設定しています。
SSLCertificateFile “/private/etc/apache2/ssl.key/server.crt” SSLCertificateKeyFile “/private/etc/apache2/ssl.key/server.key” ServerName 127.0.0.1:443 |
Apache再起動 |
4-1. コンフィグファイルの文法チェック
変更したコンフィグファイルの記述に誤りがないかチェックします。
# sudo apachectl configtest
4-2. Apache再起動
すでに停止しているので、起動だけします。
# sudo apachectl start