5/6公開【ConoHa VPSでアルファSSL 其の二】~秘密鍵とCSRの作り方およびデュアルアクセスの注意点~

【ConoHa VPSでアルファSSL 其の二】~秘密鍵とCSRの作り方およびデュアルアクセスの注意点~

「やすらいだ猫」の画像のアイキャッチ

前回の「【ConoHa VPSでアルファSSL 其の一】〜SSL/TLSの基礎知識編~」では、SSL/TLSの基本やアルファSSLの特徴、そしてConoHa VPSの利用方法について解説しました。

今回は、実際にサーバー上でSSL化への第一歩となる「CSR(証明書署名要求)」を作成していく実践編です。

目次

CSR(証明書署名要求)とは

CSR(Certificate Signing Request)は、認証局(今回はGMOグローバルサイン)に対して「SSL証明書」の発行を申請するためのいわば「申し込み書」です。

ConoHa VPSサーバー内で生成した「秘密鍵」とペアになる「公開鍵」、および申請者の組織情報(ドメイン名や国、地域など)が含まれています。

このCSRを認証局に提出し、審査に合格することで初めてSSL証明書が発行されます。

SSL証明書とは

SSL証明書(SSLサーバー証明書)は、Webサイトの通信を暗号化(https化)し、サイト運営者の実在性を証明する電子的な身分証明書です。ブラウザとサーバー間のデータを暗号化して盗聴や改ざんを防ぎ、信頼できるサイトであることを証明することで、フィッシング詐欺や「なりすまし」のリスクを軽減します。

作業環境の準備

まずはサーバー(ConoHa VPS)にSSH接続し、秘密鍵やCSRを安全に保存するための作業ディレクトリを準備します。

STEP
秘密鍵やCSRを保存するための専用ディレクトリを作成
sudo mkdir -p /etc/ssl/private
  • ただし、/etc/ssl/private はDebian/Ubuntu系では標準で存在します。

「秘密鍵」は、CSRを生成するために必要です。そのため絶対に外部へ漏洩させてはならないファイルです。
ファイルを保存する「フォルダ(ディレクトリ)」の段階から、厳格なアクセス制限(パーミッション設定)をかける必要があります。

STEP
ディレクトリの権限を「700」に変更
sudo chmod 700 /etc/ssl/private

Linuxにおけるchmod 700は、「所有者(今回はroot管理者)だけが読み書き・実行できる設定を意味します。この設定をしておくことで、万が一サーバー内に悪意のあるプログラムや他のユーザーが侵入しても、このフォルダ内のファイルは守られます。

STEP
必要なツールの確認
openssl version

CSRの作成には openssl コマンドを使用します。openssl コマンドは通常Linuxに標準インストールされていますが、念のため以下のコマンドを実行し、バージョン情報が表示されることを確認しておきます。

秘密鍵(Private Key)とCSRの作成

SSL化の要となる「秘密鍵」と、認証局への申請書である「CSR」を作成します。

STEP
秘密鍵を生成する

今回はパスフレーズ無し、RSA 3072bitで作成します。

sudo openssl genrsa -out /etc/ssl/private/example.com.key 3072
パスフレーズは不要?

genrsa コマンドは、デフォルトで「パスフレーズなし(暗号化なし)」で秘密鍵が作成されます。

しかし、もしセキュリティ要件などであえてパスフレーズをつけたい場合は、コマンド内に -aes256 などの暗号化オプションを追加します。

# パスフレーズ付きで秘密鍵を生成する場合
sudo openssl genrsa -aes256 -out /etc/ssl/private/example.com.key 3072

※実行すると、ターミナル上でパスフレーズの設定(2回)を求められます。

注意

Webサーバー運用においてパスフレーズ付きの秘密鍵を使用すると、サーバーやNginxを再起動するたびにパスフレーズの入力を求められ、手動入力が完了するまでWebサーバーが起動できない状態になります。そのため、特別な理由がない限りはパスフレーズなしにするのが一般的です。

なぜ「3072」を指定しているのか?

末尾の数字は鍵の長さを表します。一般的には「2048」が多く使われていますが、前回の「【ConoHa VPSでアルファSSL 其の一】〜SSL/TLSの基礎知識編~」でも触れた「2030年問題(2048bitの安全性低下)」を見据え、本記事ではよりセキュアで長期的に安全な「3072bit」を採用しています。

尚、より高速な「ECDSA(楕円曲線暗号)」を使いたい場合は、genrsa の代わりに genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 を使用します。

STEP
作成した秘密鍵からCSRを生成する

作成した秘密鍵を読み込み、CSR(申請書)を生成します。作成方法には「対話形式」と「一括指定形式」の2つがあります。

ここでは「対話形式」で説明します。

コマンドを実行すると、ターミナル上で「国名は?」「組織名は?」と順番に聞かれるため、最初はこちらで実行することをおすすめします。

sudo openssl req -new -key /etc/ssl/private/example.com.key -out /tmp/example.com.csr

その後順番に以下のように順番に入力します。

Country Name (2 letter code) [XX]: JP (国名:JPと入力)
State or Province Name (full name) []: Tokyo (都道府県を入力)
Locality Name (eg, city) [Default City]: Chiyoda-ku (市区町村を入力・省略可)
Organization Name (eg, company) [Default Company Ltd]: YourCompany (組織名・サイト名を入力)
Organizational Unit Name (eg, section) []: Web (部門名を入力・省略可)
Common Name (eg, your name...) []: www.example.com (★最重要:アルファSSLのデュアルアクセス(※)を有効にするにはここをwww付きで申請する必要があります。)
Email Address []: (何も入力せずEnterでスキップ)

Please enter the following 'extra' attributes...
A challenge password []: (何も入力せずEnterでスキップ)
An optional company name []: (何も入力せずEnterでスキップ)
一発でCSRを生成するコマンドをご紹介

質問される内容をあらかじめ -subj オプションの中に書き込んでおき、コマンド1行で一気に作成する方法です。入力ミスが起きにくいためおすすめです。

sudo openssl req -new -key /etc/ssl/private/example.com.key -out /tmp/example.com.csr -subj "/C=JP/ST=Tokyo/L=Chiyoda-ku/O=YourCompany/CN=www.example.com"
【重要】デュアルアクセス有効時の注意点


アルファSSLの「デュアルアクセス機能(www.example.com と example.com の両方でSSLを有効にする機能)」を利用する場合、CN(コモンネーム)には必ず「www」を含めたホスト名を指定してください。
また、CSR生成時に -addext などでSAN(Subject Alternative Name)を明示的に指定すると、かえって認証エラーになるケースがあるため、上記のようにシンプルに記述するのが正解です。

STEP
生成されたCSRファイルを確認する

念のため生成されたCSRファイルを確認します。(game.doc778.comの例)

sudo openssl req -in /tmp/game.doc778.com.csr -noout -text

game.doc778.comの例

Certificate Request:
    Data:
        Version: 1 (0x0)
        Subject: C = JP, ST = Virtual, O = ofbita, CN = www.game.doc778.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (3072 bit)
                Modulus:
                    00:b3:34:8b:51:20:50:c5:cb:a0:17:f3:3d:80:21:
                    e8:f9:c1:0f:7e:9d:7e:87:b1:04:bc:e2:82:1b:02:
                    (中略)
                Exponent: 65537 (0x10001)
        Attributes:
            (none)
            Requested Extensions:
    Signature Algorithm: sha256WithRSAEncryption
    Signature Value:
        37:60:92:eb:d6:d2:00:ab:fe:46:a8:ad:48:aa:84:3d:76:f4:
        (中略)
STEP
パーミッションを設定する

パスフレーズを設定しない分、ファイル自体へのアクセス権限を厳格に制限します。所有者(root)以外は絶対に読み取れない 600 に設定します。

sudo chown root:root /etc/ssl/private/example.com.key
sudo chmod 600 /etc/ssl/private/example.com.key

秘密鍵とCSRをまとめて生成する方法

上記では秘密鍵を生成してからCSRを生成しましたが、まとめて生成する方法もあります。

sudo openssl req -new -newkey rsa:3072 -nodes \
  -keyout /etc/ssl/private/example.com.key \
  -out /tmp/example.com.csr \
  -subj "/C=JP/ST=Tokyo/O=YourCompany/CN=www.example.com"
-nodesオプションについて

このコマンド(req -newkey)は、デフォルトで秘密鍵にパスフレーズをかけようとします。それを防ぎ「パスフレーズなし」にするために、必ず -nodesオプションを付ける必要があります。

-nodesはNo DES encryptionの略と言われていますが、DESに限らず、秘密鍵への暗号化(パスフレーズ)をかけないオプションとして使われています。

CSR生成時の入力オプション(-subj)

-subj に指定できる主要なパラメータを網羅しました。

パラメータ英語名意味入力例・注意点
CCountry国名必須:日本の場合は必ず JP(2文字)
STState都道府県必須:TokyoOsaka など
LLocality市区町村任意:Chiyoda-ku など
OOrganization組織名必須:会社名。個人の場合は Personal やサイト名
OUOrg Unit部門名任意:Web や IT など(省略可)
CNCommon Nameコモンネーム最重要:SSL化するドメイン名

CSR内容の確認(Modulusのハッシュ値比較)

アルファSSLに申し込む前に、作成したファイルが正しく生成されているか、秘密鍵とCSRが確実に「ペア」になっているかを必ず検証します。

なぜ確認が必要なの?

過去に作った古い秘密鍵やCSRがサーバーに残っていると、誤って違うペアで申請してしまう事故が起こりがちです。ペアを間違えたまま証明書を発行してしまうと、サーバー設定時にエラーとなり最初からやり直し(再発行)になってしまうため、事前のチェックが非常に重要です。

1.CSRファイルの内容(CN)確認

指定したドメイン名が正しく含まれているか確認します。

openssl req -in /tmp/example.com.csr -noout -subject

出力結果に CN = www.example.com が含まれていれば成功です。

2.生成されたCSRと秘密鍵のペアリング確認

鍵の本体を構成する「Modulus(モジュラス)」という巨大な文字列を抽出し、それをハッシュ化(短い文字列に変換)して見比べます。

# 秘密鍵のModulusハッシュ値を出力
sudo openssl rsa -noout -modulus -in /etc/ssl/private/example.com.key | openssl sha256 
# CSRのModulusハッシュ値を出力
sudo openssl req -noout -modulus -in /tmp/example.com.csr | openssl sha256

この2つのコマンドの出力結果(英数字の文字列)が完全に一致していれば、間違いなく正しいペアです。安心して次の申請作業に進んでください。

まとめと次回予告

本記事では、OpenSSLコマンドを使った秘密鍵の生成から、アルファSSL特有の仕様(www付きでの申請とSANの罠)を考慮したCSRの作成、そして確実なペアリング確認までを行いました。作成した秘密鍵は絶対に外部に漏らさないようご注意ください。

次回「【ConoHa VPSでアルファSSL 其の三】~コントロールパネルでの申し込みとDNS認証手順~」では、今回作成したCSRファイルの中身を使って、実際にConoHaのコントロールパネルからアルファSSLの申し込みとDNS認証を行う手順を解説します。お楽しみに!

  • URLをコピーしました!
目次