CentOS6.5 / Ubuntu14.04 でのサーバ証明書の作成方法です。
いわゆるオレオレ証明書になります。
以下作業は root で行ってください。
必要パッケージインストール
必要なパッケージをインストールします。
CentOS6.5の場合 yum install openssl Ubuntu14.04の場合 apt-get install openssl
サーバ用秘密鍵(server.key)の作成
下記を実行します。
openssl genrsa -aes128 2048 > server.key
実行すると、パスフレーズを要求されますので、秘密鍵を暗号化する為のパスフレーズを入力します。
パスフレーズは空には出来ませんので、4文字以上でパスフレーズを入力して下さい。
パスフレーズ入力後、もう一度確認の為、入力を求められるので、再度入力して下さい。
2048ビット長のRSA 秘密鍵を生成し、AES 128bitで暗号化して server.key を出力します。
出力された server.key がサーバ用秘密鍵です。
次に、サーバ用秘密鍵(server.key)からパスフレーズを削除します。
server.keyの作成時に入力したパスフレーズを要求されるので、入力します。
サーバ用秘密鍵(server.key)からパスフレーズを削除したものが生成されます。
openssl rsa -in server.key -out server.key
パスフレーズを削除するのは、サーバ用秘密鍵への操作で要求されるパスフレーズの入力を避ける為です。
パスフレーズを削除しておかないと、例えば、apache の設定でサーバ用秘密鍵を指定していた場合、apache起動時に server.key のパスフレーズの入力が要求され、apache が自動起動できなくなります。
但し、パスフレーズの削除は、AES 128bit でパスフレーズにより暗号化されていたサーバ用秘密鍵の暗号化の解除を意味します。
apache の起動時等でパスフレーズの入力を行っても良い場合は、上記の手順でのパスフレーズ削除は不要です。
署名要求ファイル(server.csr)の作成
署名要求ファイル(server.csr)を作成します。
openssl req -utf8 -new -key server.key -out server.csr
実行後、以下のように入力します。赤字のように入力して下さい。
「Common Name」と「A challenge password」以外の箇所は、サーバ証明書内に記述される文字列の指定です。これらは証明書のプロパティなどで表示される内容で、機能的には影響ありません。
Country Name (2 letter code) [GB]:JP State or Province Name (full name) [Berkshire]:都道府県を指定します。または単に Enter だけでも構いません。 例) Tokyo Locality Name (eg, city) [Newbury]:市区町村を指定します。または単に Enter だけでも構いません。 例) Fuchu Organization Name (eg, company) [My Company Ltd]:組織名を指定します。または単に Enter だけでも構いません。 Organizational Unit Name (eg, section) []:部署名を指定します。または単に Enter だけでも構いません。 Common Name (eg, your name or your server's hostname) []:サーバ名のFQDN Email Address []:メールアドレスを指定します。または単に Enter だけでも構いません。 Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:Enterキー An optional company name []:Enterキー
Common Name でサーバ名を必ずFQDNで入れて下さい。
FQDN で入力しておかないと、このサーバを将来的に Windows から利用する際に不都合が生じます。
この後の手順で生成するサーバ証明書(server.crt)は、Windowsのインターネットエクスプローラで証明書インポート出来ますが、その際に不正な証明書として扱われてしまいます。
自己署名したサーバ証明書(server.crt)の作成
自己署名したサーバ証明書(server.crt)を作成します。
openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 365
このサーバ証明書の有効期限は現在時刻から、-days で指定した日数経過までとなります。
アクセス権を設定します。
chmod 400 server.*
これで証明書の作成は完了です。
使用例
作成したサーバ証明書の利用例です。
apache でSSL暗号化通信を行う https でアクセスする為の設定です。
CentOS の場合
server.crt と server.key を /etc/pki/tls/certs/ にコピー後、こちら の「apacheの設定」の箇所を参照して下さい。
参照先でも、サーバ証明書の作成方法を一部異なるコマンドで説明していますが、本記事で作成される証明書と同等です。
Ubuntu の場合
2015/1/19 手順を修正しました
Ubuntuの apache でSSL暗号化通信を行うには、事前に以下の作業が必要です。
a2enmod ssl a2ensite default-ssl
作成した証明書を以下の箇所に置きます。
/etc/ssl/certs/server.crt /etc/ssl/private/server.key
上記の箇所に置いた証明書を /etc/apache2/sites-available/default-ssl.conf で指定します。
SSLCertificateFile 、SSLCertificateKeyFile の行をコメントアウトした後、末尾に以下を追加します。
SSLCertificateFile /etc/ssl/certs/server.crt SSLCertificateKeyFile /etc/ssl/private/server.key
または SSLCertificateFile 、SSLCertificateKeyFile の行を上の内容に置き換えます。
設定後、apache を再起動します。
service apache2 restart
これで https での SSL通信時に作成したサーバ証明書が利用されます。
コメント