SSL証明書の作成方法

カテゴリ:SSL証明書

公開鍵暗号方式

公開鍵暗号方式は公開鍵暗号基盤(PKI)に基づいて策定されています。
公開鍵暗号方式では、公開鍵と秘密鍵のペアを生成します。
公開鍵暗号方式の特徴として、公開鍵で暗号化したデータはペアになる秘密鍵でしか復号化できない、秘密鍵で暗号化したデータはペアになる公開鍵でしか復号化できないというルールがあります。
そのため、公開鍵は誰が取得してもペアになる秘密鍵が無い限り復号化できないため問題ありませんが、秘密鍵は自分しか持っていない事を前提とした正に秘密の鍵です。

SSL証明書とは

SSL証明書はこの公開鍵が正当な鍵(すり替えられたり改竄されていない)であることを証明します。
公開鍵は名前が示す通り、誰でも取得できるため、裏を返せば正規のサイトを詐称した(なりすました)偽のサイト(フィッシングサイト)にユーザーを誘導し、偽物の鍵を不正にダンロードさせれば、多くの場合、偽サイトである事に気づきません。

そのため、この公開鍵が正当な鍵である事を証明するための証明書が必要であり、その証明書を発行するのが第三者機関である、認証局(CA:Certification Authority)になります。
認証局は署名要求(CSR:Certificate Signing Request)と秘密鍵を元に証明書を作成し、Webブラウザは鍵が使われる時(SSLを使用したサイト(httpsのサイト)を開く際)に、その公開鍵やドメイン(FQDN)が正当なものか不正なものかを証明書を基に識別し、もし不正なものなら検証失敗となり、Webブラウザは警告を表示します。
具体的には証明書が認証局で署名されたものではない(中間CA証明書が見つからない)場合や証明書の有効期限が切れている場合、アクセスしているFQDNがCSRの「Common Name」に指定したFQDNとは異なる場合等にエラーとなります。
※但し、Webブラウザ側でそれを無視して表示させる事もできます。

認証局で署名されていない、いわゆる自己証明書はこの正当性の確認がされていない(確認できない)鍵であるため、多くのWebブラウザでは信頼出来ない証明書として警告を表示します。
警告が表示されたからと言って必ずしも不正な鍵とは限りませんが、少なくとも保証はできない鍵であることを意味します。

秘密鍵とCSRの作成

CA証明書も自己証明書もCSRと秘密鍵の作成までは同じです。
※CSR(署名要求)は公開鍵情報の他に国名や住所、会社名、対象のドメイン名(FQDN)の情報を含んだファイルで、証明書を作成するのに必要なファイルです。

以下では Apache の証明書(PEM形式)の作成手順を解説します。
※鍵にはエンコードの違いで、テキスト形式のPEM(Base64によるエンコード)と、バイナリ形式のDERがあります。
openssl のデフォルトの形式はPEMです。

openssl コマンドで秘密鍵とペアのCSRファイルを作成します。

# openssl req -newkey rsa:2048 -days <有効期限(日)> -nodes -keyout <秘密鍵のファイル名> -out 
例)
# openssl req -new -newkey rsa:2048 -days 3650 -nodes -keyout server.key -out server.csr
以下が尋ねられるため、適切に登録します。
Country Name (2 letter code) [XX]:国名です。日本はJPです。
State or Province Name (full name) []:都道府県をローマ字で入力します。
Locality Name (eg, city) [Default City]:市区町村をローマ字で入力します。
Organization Name (eg, company) [Default Company Ltd]:組織名や会社名をローマ字で入力します。
Organizational Unit Name (eg, section) []:部署名をローマ字で入力します。
Common Name (eg, your name or your server's hostname) []:証明書の対象のドメイン名(FQDN)を入力します。
Email Address []:電子メールアドレスを入力します。必須ではないため空にする事もできます。

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:Apacheの起動時のパスワードです。必須ではないため空にする事もできます。
An optional company name []:組織名や会社名の略称です。必須ではないため空にする事もできます。
※最後の3つは空にできるため、特に不要なら何も入力せずに [Enter] キーを押せば進みます。

完了すれば、秘密鍵「server.key 」とCSR「server.csr」が作成されているはずです。
一般的にはこのCSRに対して認証局で署名してもらい、CA署名済み証明書を発行してもらいます。
その場合は、以下の「自己署名証明書の作成」の作業は不要です。

自己署名証明書の作成

自分自身で自分のCSRを署名した証明書を発行します。
このため信頼出来ない証明書という意味で「オレオレ証明書」とも呼ばれます。
自己署名証明書を使用した場合、多くのWebブラウザでは警告が画面に表示され、たとえ正規の公開鍵であっても返って利用者に不信感を与えるため、使用する意味はあまりありません。
そのため、テスト目的での使用が主になりますが、以下に自己署名証明書の作成手順を解説します。

以下のコマンドで、秘密鍵(server.key)とCSR(server.csr)から証明書(server.crt)を作成します。

# openssl x509 -in server.csr -days 3650 -req -signkey server.key -out server.crt
「x509」はPKI(Public key infrastructure)の規格です。
「-days」には証明書の有効期限(日数)を指定します。
「-in」には署名要求(CSR)のファイル名を指定します。
「-signkey」には秘密鍵のファイル名を指定します。
「-out」には出力する証明書のファイル名を指定します。

これでSSL接続に必要な秘密鍵と公開鍵を含むデジタル証明書「server.crt」ができました。

CA証明書の作成

認証局にCSRを送り、CA署名済み証明書(CRTファイル)を発行してもらいます。
Apache サーバーには秘密鍵とCA署名済み証明書、中間CA証明書を設定します。
※ルート証明書は通常Webブラウザ側で持っています。

公開日時: 2014年09月13日  11:33:54

SSL証明書に戻る

このページのトップに戻る