CentOS6/CentOS7/Ubuntu14.04 でのサーバ証明書の作成方法

ALL
スポンサーリンク

サーバ証明書の作成方法です。
CentOS6/CentOS7/Ubuntu14.04、いずれでも同じ手順で作成できます。

下記で紹介した作成方法の最新改訂版になります。
またプライベート認証局(オレオレ認証局)による作成方法も追加で説明します。

CentOS6 / Ubuntu14.04 でのサーバ証明書の作成方法 パソコン鳥のブログ

必要パッケージインストール

openssl コマンドが必要です。下記でパッケージをインストールします。
作業は root で行ってください。

CentOS6、CentOS7 の場合
yum install openssl
Ubuntu14.04の場合
apt-get install openssl

以下、次の2通りの作成方法を説明します。

・プライベート認証局(オレオレ認証局)による作成方法
・オレオレ証明書

プライベート認証局(オレオレ認証局)による作成方法

CA証明書を作成し、次にそのCA局で署名したサーバ証明書を作成します。
CA証明書を作成する手間が増えますが、作成したプライベート認証局(オレオレ認証局)の証明書を、ブラウザにインポートしておくと、ブラウザでの証明書検証時のエラーを無くすことが出来ます。

手順は以下になります。

CA証明書の作成

ここでは、有効期限10年の、RSA 2048ビット長、256bitのハッシュ長のSHA-2証明書を作成します。
次の手順で作成します。

openssl genrsa 2048 > ca.key
openssl req -utf8 -new -key ca.key -out ca.csr
openssl x509 -in ca.csr -out ca.crt -req -signkey ca.key -days 3650 -sha256
chmod 400 *.key

手順の詳細です。

openssl genrsa 2048 > ca.key
オレオレ認証局(以下CA局)の秘密鍵を、RSA 2048ビット長で作成します。
出力された ca.key がCA用秘密鍵です。

作成した秘密鍵を暗号化したい場合は、上記コマンドの代わりに下記を実行します。

openssl genrsa -aes128 2048 > ca.key

実行すると、パスフレーズを要求されますので、秘密鍵を暗号化する為のパスフレーズを入力します。
パスフレーズは空には出来ませんので、4文字以上でパスフレーズを入力して下さい。
パスフレーズ入力後、もう一度確認の為、入力を求められるので、再度入力して下さい。

RSA 2048ビット長の秘密鍵を、AES 128bitで暗号化したものが作成されます。
この場合、以降、CA用秘密鍵(ca.key)への操作ではパスフレーズの入力を要求されます。

openssl req -utf8 -new -key ca.key -out ca.csr
CA局用の署名要求ファイル(ca.csr)を作成します。

実行後、以下のように入力します。赤字のように入力して下さい。
「Common Name」と「A challenge password」以外の箇所は、CA証明書内に記述される文字列の指定です。これらは証明書のプロパティなどで表示される内容で、機能的には影響ありません。

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) []:認証局名として何か名称を入力します。<del>作業サーバ名のFQDN</del>(2019.3.11 訂正)
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キー

2019.3.11 追記
注:Common Name で入力する名称は、この後の「サーバ証明書の作成」手順で指定する Common Nameと異なるようにします

CA証明書とサーバ証明書の Common Name は異なるようにしておかないと、作成した証明書は、利用時に不正な証明書として扱われてしまいます。

openssl x509 -in ca.csr -out ca.crt -req -signkey ca.key -days 3650 -sha256
CA用秘密鍵(ca.key)で自己署名したCA証明書(ca.crt)を作成します。

このCA証明書の有効期限は現在時刻から、-days で指定した日数経過までとなります。
-sha256 によって、256bitのハッシュ長のSHA-2証明書となります。

chmod 400 *.key
作成した秘密鍵を一般ユーザが参照出来ない様にします。

サーバ証明書の作成

CA証明書に続けて、サーバ証明書を次の手順で作成します。

(2019.3.12 修正)
openssl genrsa -aes128 2048 > server.key
openssl genrsa 2048 > server.key
openssl rsa -in server.key -out server.key
openssl req -utf8 -new -key server.key -out server.csr
openssl x509 -in server.csr -out server.crt -req -CA ca.crt -CAkey ca.key -days 3650 -sha256 -CAcreateserial
chmod 400 *.key

openssl genrsa 2048 > server.key
サーバ用秘密鍵を、RSA 2048ビット長で作成します。
出力された server.key がサーバ用秘密鍵です。

作成した秘密鍵を暗号化したい場合は、上記コマンドの代わりに下記を実行します。

openssl genrsa -aes128 2048 > ca.key

実行すると、パスフレーズを要求されますので、秘密鍵を暗号化する為のパスフレーズを入力します。
パスフレーズは空には出来ませんので、4文字以上でパスフレーズを入力して下さい。
パスフレーズ入力後、もう一度確認の為、入力を求められるので、再度入力して下さい。

RSA 2048ビット長の秘密鍵を、AES 128bitで暗号化したものが作成されます。
この場合、以降、サーバ用秘密鍵(server.key)への操作ではパスフレーズの入力を要求されます。

例えば、apache の設定でサーバ用秘密鍵を指定していた場合、apache起動時に server.key のパスフレーズの入力が要求されます。
apache が自動起動できなくなることに注意して下さい。

openssl req -utf8 -new -key server.key -out server.csr
署名要求ファイル(server.csr)を作成します。

実行後、以下のように入力します。赤字のように入力して下さい。
「Common Name」と「A challenge password」以外の箇所は、CA証明書内に記述される文字列の指定です。これらは証明書のプロパティなどで表示される内容で、機能的には影響ありません。

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のインターネットエクスプローラで証明書インポート出来ますが、その際に不正な証明書として扱われてしまいます。

openssl x509 -in server.csr -out server.crt -req -CA ca.crt -CAkey ca.key -set_serial 0 -days 3650 -sha256
オレオレ認証局(以下CA局)で署名したサーバ証明書(server.crt)を作成します。
先の手順で作成した ca.crt、ca.key を指定します。

ここで作成されるサーバ証明書(server.crt)の有効期限は現在時刻から、-days で指定した日数経過までとなります。
また -sha256 によって、256bitのハッシュ長のSHA-2証明書となります。

chmod 400 *.key
作成した秘密鍵を一般ユーザが参照出来ない様にします。

作成した証明書の確認方法

証明書の確認方法です。

サーバで下記を実行します。
指定した証明書を使用して、4433番ポートで httpsサーバとして動作します。

openssl s_server -cert server.crt -CAfile ca.crt -key server.key -www

ブラウザから https://XXXX:4433 のようにアクセスします。
XXXX はサーバのFQDN に置き換えて下さい。

プライベート認証局(オレオレ認証局)による証明書なので、ブラウザでのアクセス時に警告が出ます。
IEの場合は「この Web サイトのセキュリティ証明書には問題があります。」と出るので、「このサイトの閲覧を続行する (推奨されません)。 」を選択します。
Firefoxの場合は「接続の安全性を確認できません」と表示されるので、「危険性を理解した上で接続するには」から「例外を追加」を押した後、「セキュリティ例外を承認」ボタンを押します。

次のような表示で始まる内容がすぐさまブラウザに表示されれば、証明書の確認はOKです。

openssl s_server -cert server.crt -CAfile ca.crt -key server.key -www
Secure Renegotiation IS supported
Ciphers supported in s_server binary
   :

CA証明書のブラウザへのインポート

作成したオレオレ認証局の証明書を、ブラウザにインポートしておくと、先述の作成した証明書の確認方法にあるブラウザでのアクセス時の警告を無くすことが出来ます。

まず、インポート用のcerファイルをサーバで作成します。

openssl x509 -in ca.crt -out ca.cer

作成した ca.cer をクライアントPCに持ってきて、ブラウザにインポートします。

IEの場合は、ca.cer をダブルクリックします。
次の画面が現れるので「証明書のインストール」を選択します。

画像

「証明書のインポートウィザード」画面になるので、「次へ」を押していき、最後に「完了」を押してインポート完了です。

Firefoxの場合は、オプション->詳細 で、証明書タブを選択します。
「証明書を表示」ボタンを押し、現れた画面で「認証局証明書」タブを選び、「インポート」ボタンを押します。
次の画面になるので、「この認証局によるWebサイトの識別を信頼する」にチェックを入れて「OK」ボタンを押して完了です。

画像

これで 作成した証明書の確認方法 の手順を実施すると、ブラウザでの警告は表示されなくなります。

同一のプライベート認証局(オレオレ認証局)で署名したサーバ証明書に対して、ブラウザでの警告は表示されなくなるので、サーバが複数台ある場合は、プライベート認証局(オレオレ認証局)による作成方法がおすすめです。

オレオレ証明書

プライベート認証局(オレオレ認証局)による作成方法に対して、ここではオレオレ証明書の作成方法を説明します。

次の手順で作成します。
ここでは、有効期限10年の、RSA 2048ビット長、256bitのハッシュ長のSHA-2証明書を作成します。

openssl genrsa 2048 > server.key
openssl req -utf8 -new -key server.key -out server.csr
openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650 -sha256
chmod 400 server.*

手順の詳細です。

openssl genrsa 2048 > server.key
サーバ用秘密鍵を、RSA 2048ビット長で作成します。
出力された server.key がサーバ用秘密鍵です。

作成した秘密鍵を暗号化したい場合は、上記コマンドの代わりに下記を実行します。

openssl genrsa -aes128 2048 > ca.key

実行すると、パスフレーズを要求されますので、秘密鍵を暗号化する為のパスフレーズを入力します。
パスフレーズは空には出来ませんので、4文字以上でパスフレーズを入力して下さい。
パスフレーズ入力後、もう一度確認の為、入力を求められるので、再度入力して下さい。

RSA 2048ビット長の秘密鍵を、AES 128bitで暗号化したものが作成されます。
この場合、以降、サーバ用秘密鍵(server.key)への操作ではパスフレーズの入力を要求されます。

例えば、apache の設定でサーバ用秘密鍵を指定していた場合、apache起動時に server.key のパスフレーズの入力が要求されます。
apache が自動起動できなくなることに注意して下さい。

openssl req -utf8 -new -key server.key -out server.csr
署名要求ファイル(server.csr)を作成します。

実行後、以下のように入力します。赤字のように入力して下さい。
「Common Name」と「A challenge password」以外の箇所は、CA証明書内に記述される文字列の指定です。これらは証明書のプロパティなどで表示される内容で、機能的には影響ありません。

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のインターネットエクスプローラで証明書インポート出来ますが、その際に不正な証明書として扱われてしまいます。

openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650 -sha256
自己署名したサーバ証明書(server.crt)を作成します。
先の手順で作成した server.csr、server.key を指定します。

ここで作成されるサーバ証明書(server.crt)の有効期限は現在時刻から、-days で指定した日数経過までとなります。
また -sha256 によって、256bitのハッシュ長のSHA-2証明書となります。

chmod 400 *.key
作成した秘密鍵を一般ユーザが参照出来ない様にします。

作成した証明書の確認方法

証明書の確認方法です。

サーバで下記を実行します。
指定した証明書を使用して、4433番ポートで httpsサーバとして動作します。

openssl s_server -cert server.crt -key server.key -www

ブラウザから https://XXXX:4433 のようにアクセスします。
XXXX はサーバのFQDN に置き換えて下さい。

オレオレ証明書なので、ブラウザでのアクセス時に警告が出ます。
IEの場合は「この Web サイトのセキュリティ証明書には問題があります。」と出るので、「このサイトの閲覧を続行する (推奨されません)。 」を選択します。
Firefoxの場合は「接続の安全性を確認できません」と表示されるので、「危険性を理解した上で接続するには」から「例外を追加」を押した後、「セキュリティ例外を承認」ボタンを押します。

次のような表示で始まる内容がすぐさまブラウザに表示されれば、証明書の確認はOKです。

openssl s_server -cert server.crt -key server.key -www
Secure Renegotiation IS supported
Ciphers supported in s_server binary
   :

参考

x509 – Certificate display and signing utility

stunnel で SSH over SSL する (forward proxy 経由も可) – Qiita

オレオレ証明書をopensslで作る(詳細版) – ろば電子が詰まっている

openssl:CA

CentOS6 / Ubuntu14.04 でのサーバ証明書の作成方法 パソコン鳥のブログ

証明書をサーバに設定する前にチェックする パソコン鳥のブログ

コメント

  1. プロスト より:

    こんにちは。
    linuxの初心者ですが、
    postfix・dovecotのメールサーバーを暗号化したいと思い
    こちらのブログを参考にさせていただきました。
    こちらのブログのおかげで無事に暗号化が出来たのですが
    Windows Liveメールを起動すると
    「サーバーにセキュリティーで保護された接続を確立できませんでした。」
    「接続しているサーバーは、確認できないセキュリティー証明書をしようしています。
     証明書の署名を検証できません。
     このサーバーを使用し続けますか?」
    と表示され、「はい」をクリックすると接続されます。
    起動するたびに、上記メッセージが表示されるので
    ブログ通りに作成した ca.cer をwindows7でダブルクリックし
    証明書をインポートしたのですが
    それでも、毎回起動時に同じメッセージが表示されます。
    証明書は信頼されたルート証明機関にインポートしてあります。
    centos7
    postfix ver.2.10.1
    dovecot ver 2.2.10
    以上、長くなってしまいましたが
    Windows Liveメールでメッセージが出ないよう設定する事は可能でしょうか。
    よろしくお願いします。

  2. パソコン鳥 より:

    Windows Live メールは使っていないので良くわからないのですが、下記のページの「PCに持ってくると、~」からの手順での証明書インポート方法ではどうでしょうか。
    http://divisionbyzero.hatenablog.jp/entry/2012/06/26/223000

  3. プロスト より:

    返信ありがとうございます。
    教えていただいたサイトを参考にインポートしましたが
    やはり、同じでした。WindowsLiveメール2012では
    無理だと判断してサンダーバードに乗り換える事にしました。
    ありがとうございました。