Ubuntuで独自CA構築

Webサーバ上に独自CAを構築して証明書を作成する。
OS: Ubuntu12.04
参考URL: Ubuntu documentation: Certificates

必要なディレクトリを作成

$ sudo mkdir /etc/ssl/CA
$ sudo mkdir /etc/ssl/newcerts

シリアルとインデックス管理ファイルを作成する

$ sudo sh -c "echo '01' > /etc/ssl/CA/serial"
$ sudo touch /etc/ssl/CA/index.txt

openssl.cnfファイルを編集する。

$ sudo cp -p /etc/ssl/openssl.cnf{,.orig}
$ sudo vi /etc/ssl/openssl.cnf
dir = /etc/ssl # Where everything is kept
database = $dir/CA/index.txt # database index file.
certificate = $dir/certs/cacert.pem # The CA certificate
serial = $dir/CA/serial # The current serial number

CAの鍵と証明書を作成 (有効期間10年)

$ sudo openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3652
...
Enter PEM pass phrase: ********
Verifying - Enter PEM pass phrase: ********
...
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Aichi
Locality Name (eg, city) []:Nagoya
Organization Name (eg, company) [Internet Widgits Pty Ltd]: MyHome
Organizational Unit Name (eg, section) []: Dept. for general purpose
Common Name (e.g. server FQDN or YOUR name) []:MyCA
Email Address []: oreore@example.jp

出来上がった鍵と証明書をディレクトリに配置する。

$ sudo mv cakey.pem /etc/ssl/private/
$ sudo mv cacert.pem /etc/ssl/certs/
$ sudo chmod go-rwx /etc/ssl/private/cakey.pem

以上でCAの構築は完了。

以下、サーバ証明書を作成する。
サーバ鍵の作成

$ sudo openssl genrsa -aes256 -out server.key 2048

鍵ファイルに付いてしまったパスワードを削除する。

$ sudo openssl rsa -in server.key -out server.key

CSR作成 (有効期間は5年にしてみる)

$ sudo openssl req -new -days 1826 -key server.key -out server.csr
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Aichi
Locality Name (eg, city) []:Nagoya
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyHome
Organizational Unit Name (eg, section) []: Dept. for general purpose
Common Name (e.g. server FQDN or YOUR name) []:www.example.jp
Email Address []: oreore@example.jp
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

先ほど作成したCAでサーバCSRに署名する

$ sudo openssl ca -in server.csr -config /etc/ssl/openssl.cnf
Using configuration from /etc/ssl/openssl.cnf
Enter pass phrase for /etc/ssl/private/cakey.pem: ********
....

証明書が/etc/ssl/newcerts/01.pemとして作成されるので、証明書ディレクトリにコピーする。
$ sudo cp /etc/ssl/newcerts/01.pem /etc/ssl/certs/server.crt

鍵ファイルも保存しておく

$ sudo cp server.key /etc/ssl/private/server.key
$ sudo chown root:root /etc/ssl/private/server.key
$ sudo chmod go-rwx /etc/ssl/private/server.key

WordPressインストール

作ろうとしているデータベースと同名のデータベースがあれば削除しておく。ユーザも同様に。

$ mysql -u root -prootpass -e 'DROP DATABASE wp_db;'
$ mysql -u root -prootpass -e "DROP USER 'wp_user'@'localhost';"

データベースとユーザを作成する。

$ mysql -u root -prootpass -e "CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'wpadminpass';"
$ mysql -u root -prootpass -e 'CREATE DATABASE wp_db;'
$ mysql -u root -prootpass -e 'GRANT ALL PRIVILEGES ON wp_db.* TO wp_user@localhost;'

WordPressをダウンロードして展開する。

$ wget http://ja.wordpress.org/wordpress-4.8-ja.zip
$ unzip wordpress-4.8-ja.zip

設定ファイルを作成する。

$ cd wordpress
$ cp -p wp-config-sample.php wp-config.php
$ vi wp-config.php

define('DB_NAME', 'wp_db');
define('DB_USER', 'wp_user');
define('DB_PASSWORD', 'wpadminpass');
...
define('AUTH_KEY',         'ランダム文字列');
define('SECURE_AUTH_KEY',  'ランダム文字列');
define('LOGGED_IN_KEY',    'ランダム文字列');
define('NONCE_KEY',        'ランダム文字列');
define('AUTH_SALT',        'ランダム文字列');
define('SECURE_AUTH_SALT', 'ランダム文字列');
define('LOGGED_IN_SALT',   'ランダム文字列');
define('NONCE_SALT',       'ランダム文字列');

ランダム文字列は、https://api.wordpress.org/secret-key/1.1/salt/ で自動生成したものをコピー・ペーストする。

あとはWebサーバ(Apache, nginxなど)の設定を行い、ブラウザでサイトURLにアクセスして初期設定を行う。