【Apache SSL講座 第3回】企業サイトならこれ!有料証明書(OV/EV)のCSR生成とインストール完全手順

「無料」では買えない、「信頼」がある。

こんにちは!「LINUX工房」管理人の「リナックス先生」です。
前回は、無料の「Let’s Encrypt」を使って、コストをかけずにWebサイトをHTTPS化する方法を学びました。個人のブログやテスト環境なら、正直あれで十分です。

しかし、あなたがもし「企業の公式サイト」「クレジットカード情報を扱うECサイト」の担当者だとしたら、話は別です。
「誰でも匿名で取れる無料証明書」では、お客様に対する「実在証明」としては不十分な場合があるのです。

コウ君

先生、ちょっと待ってください。
前回「Let’s Encryptでも暗号化の強度は変わらない」って言いましたよね?
鍵マークが出るなら、見た目は一緒じゃないですか。
わざわざ年間数万円、高いものだと10万円以上払って有料の証明書を買う意味って、本当にあるんですか?

リナックス先生

いい質問ね、コウ君。
技術的な暗号化強度は同じでも、「審査の厳しさ」が違うの。
有料の証明書(特にOV/EV)は、認証局が「この会社は実在するか?」「電話番号は本物か?」まで徹底的に調べてから発行するわ。
つまり、証明書自体が「このサイトの運営元は、怪しい詐欺グループではなく、実在する〇〇株式会社です」という身分証明書になるのよ。

今回は、エンジニアとして避けては通れない、認証局(CA)への申請プロセスとインストール作業を解説します。
Certbotのような自動ツールは使えません。全て手動コマンド(OpenSSL)で行う、プロの技を習得しましょう。

🔒 Apache SSL/TLS 完全攻略講座(バックナンバー)

現在地:【第3回】企業サイトならこれ!有料証明書(JPRS/GlobalSign)のCSR生成とインストール


第1章:証明書の種類と「実在証明」の重要性

作業に入る前に、なぜ高いお金を払うのか、その種類と違いを理解しておきましょう。
上司や顧客に「なんでLet’s Encryptじゃダメなんですか?」と聞かれた時に、これを説明できるのがプロです。

種類 認証レベル 審査内容 向いている用途 主なブランド
DV
(Domain Validation)
ドメイン認証 ドメインの持ち主であるか(メールやDNSで確認)。機械的に発行される。 個人ブログ、社内システム、テスト環境 Let’s Encrypt, RapidSSL
OV
(Organization Validation)
企業実在認証 帝国データバンク等での登記確認、電話確認が行われる。 企業公式サイト、ECサイト、会員制サイト GlobalSign, JPRS, DigiCert
EV
(Extended Validation)
拡張認証 OVよりさらに厳格な審査。物理的所在地の確認など。 金融機関、官公庁、大手ECサイト DigiCert, GlobalSign

フィッシング詐欺サイトでも「DV証明書」なら簡単に取得できてしまいます。
だからこそ、企業サイトでは「OV証明書」以上を使って、ユーザーに安心感を提供する必要があるのです。


第2章:申請から発行までのワークフロー

有料証明書の導入は、以下のような流れで進みます。
Let’s Encryptのように「コマンド一発で終わり」ではありません。

  1. 秘密鍵の作成: サーバー上で秘密鍵を作る(OpenSSL)。
  2. CSRの作成: 秘密鍵を元に「署名要求(CSR)」を作る。ここに会社情報を埋め込む。
  3. 申し込み: 認証局(JPRSなど)にCSRを送って申請する。
  4. 審査: 書類審査や電話確認が行われる(数日かかる場合も)。
  5. 発行: 審査に通ると、サーバー証明書と中間証明書が送られてくる。
  6. インストール: Apacheに設定する。

今回は AlmaLinux 9 上で、ステップ1〜2と、ステップ6の作業を解説します。


第3章:【Step 1】秘密鍵(Private Key)の生成

まずは、全ての基礎となる「秘密鍵」を作成します。
この鍵が流出すると、暗号化通信が解読されてしまうため、厳重な管理が必要です。

1. 作業ディレクトリの移動

Apacheの標準的なSSLディレクトリを使います。

cd /etc/pki/tls/private/

2. 秘密鍵の生成コマンド

現在主流の 2048bit RSA鍵を生成します。

# 2024年以降を見据えるなら2048bit以上必須(4096bitも可)
sudo openssl genrsa -out server.key 2048

⚠️ パスフレーズ(暗号化)について
-aes256 オプションなどをつけると、秘密鍵自体にパスワードをかけられます。
セキュリティは高まりますが、「Apacheを再起動するたびにパスワード入力を求められる(自動起動できなくなる)」というデメリットがあります。
Webサーバー用途では、通常はパスワードなし(ノンプレーズ)で生成し、ファイル自体のアクセス権限(600)で守るのが一般的です。

3. 権限の変更

rootユーザー以外が読めないように設定します。

sudo chmod 600 server.key

第4章:【Step 2】CSR(署名要求)の生成

ここが最大の難関です。
CSR(Certificate Signing Request)には、ドメイン名や会社名などの情報を埋め込みます。
認証局はこの情報を元に証明書を発行するため、1文字でも間違えると審査に落ちて作り直しになります。

1. CSR生成コマンド

sudo openssl req -new -key server.key -out server.csr

2. 各項目の入力(入力例)

コマンドを実行すると、対話形式で情報を求められます。
半角英数字で入力してください(日本語はNGです)。

項目 説明 入力例
Country Name (C) 国コード(2文字) JP
State or Province Name (ST) 都道府県名(略さず書く) Tokyo
× Tok
Locality Name (L) 市区町村名 Shibuya-ku
Organization Name (O) 組織名(会社名)
※OV証明書では登記簿と完全一致が必要
Linux Kobo Inc.
Organizational Unit Name (OU) 部署名(任意、省略可) System Div
Common Name (CN) コモンネーム(FQDN)
SSL化するドメイン名
www.linux-kobo.com
Email Address 入力不要(Enterでスキップ) (空欄)
A challenge password 絶対に入力しない (空欄)
An optional company name 入力不要 (空欄)

💡 ワイルドカード証明書の場合
サブドメイン(a.example.com, b.example.com…)を1枚で守る「ワイルドカード証明書」を申請する場合は、Common Nameに *.example.com と入力します。

3. CSRの内容確認

作成されたCSRファイルは暗号化されたテキストですが、以下のコマンドで中身を確認できます。
申請前に必ずスペルミスがないかチェックしましょう。

openssl req -text -noout -in server.csr

これで server.csr というファイルが完成しました。
このファイルの中身(-----BEGIN CERTIFICATE REQUEST----- から -----END... まで)をコピーして、証明書販売会社の申請フォームに貼り付けて申し込みを行います。


第5章:【Step 6】証明書のインストール

申し込みから数日後、審査が完了すると、認証局からメールで証明書データが送られてきます。
通常は以下の2つ(または3つ)が提供されます。

  • サーバー証明書(例: server.crt
  • 中間CA証明書(例: intermediate.crt
  • (クロスルート証明書など ※必要な場合のみ)

これらをサーバーに設置し、Apacheに読み込ませます。

1. ファイルの配置

WinSCPなどを使ってサーバーにアップロードするか、テキストエディタで作成してコピペします。

  • サーバー証明書: /etc/pki/tls/certs/server.crt
  • 中間CA証明書: /etc/pki/tls/certs/intermediate.crt

2. Apacheの設定(ssl.conf)

AlmaLinux 9 (Apache 2.4.5x) の場合の設定です。
/etc/httpd/conf.d/ssl.conf を編集します。

sudo nano /etc/httpd/conf.d/ssl.conf

以下のディレクティブを設定します。

# 1. サーバー証明書
SSLCertificateFile /etc/pki/tls/certs/server.crt

# 2. 秘密鍵(最初に作ったやつ)
SSLCertificateKeyFile /etc/pki/tls/private/server.key

# 3. 中間CA証明書(重要!)
# Apache 2.4.8以降は SSLCertificateFile にまとめて書くこともできますが、
# SSLCertificateChainFile もまだ多くの環境で動作します。
# 明示的に指定する場合:
SSLCertificateChainFile /etc/pki/tls/certs/intermediate.crt

⚠️ 中間証明書の重要性
「PCでは見れるのに、スマホ(Android/iPhone)だと警告が出る」というトラブルの99%は、この中間証明書の設定漏れが原因です。
PCのブラウザは中間証明書を補完する機能を持っていますが、スマホや古いOSは持っていないため、サーバー側から正しく送ってあげる必要があります。

3. 構文チェックと再起動

# 設定ミスのチェック
sudo apachectl configtest

# 再起動
sudo systemctl restart httpd

第6章:トラブルシューティング「鍵が合わない!?」

有料証明書の導入で最も冷や汗をかく瞬間。
それは、Apache再起動時に「Private key does not match the certificate(秘密鍵と証明書が一致しません)」というエラーが出た時です。

原因と確認方法

「CSRを作った時の秘密鍵」と「インストールしようとしている秘密鍵」が別のものになっています。
作業中に何度か openssl genrsa を実行してしまい、ファイルを取り違えているケースが多いです。

以下のコマンドで、Modulus(モジュラス)というハッシュ値を比較してください。

# 秘密鍵のModulusを確認
openssl rsa -noout -modulus -in /etc/pki/tls/private/server.key | md5sum

# 証明書のModulusを確認
openssl x509 -noout -modulus -in /etc/pki/tls/certs/server.crt | md5sum

この2つの出力ハッシュ値が完全に一致していれば、正しいペアです。
もし違っていたら…残念ながら正しい秘密鍵を探し出すか、見つからない場合は証明書の「再発行申請(秘密鍵から作り直し)」が必要です。


まとめ:有料証明書は「手順」が命

お疲れ様でした!
これで、あなたのWebサーバーには、企業の信頼を背負った「本物の証明書」がインストールされました。

今回の重要ポイント:

  • OV/EV証明書は、企業の「実在」を証明する重要な資産。
  • CSRの作成時は、スペルミス(Tokyoなど)に最新の注意を払う。
  • 中間証明書(Chain File)を設定しないと、スマホで警告が出る。
  • 秘密鍵と証明書のペア確認には Modulus を使う。

さて、証明書のインストールはできましたが、実はApacheのデフォルト設定のままだと、セキュリティ強度が少し低い(古い暗号方式が許可されている)ことをご存知ですか?
せっかく高い証明書を買ったのに、設定が甘くて情報漏洩しては意味がありません。

次回、第4回は「セキュリティ強度を上げる!プロトコル(TLS1.3)と暗号スイートの最適化」です。
SSL評価サイト(Qualys SSL Labs)で最高評価「A+」を取るための、最強のApache設定チューニング術を伝授します。
お楽しみに!

▼ エンジニアとしてのキャリアを加速させる ▼

CSR作成を練習する
「VPS」で自分専用環境

おすすめVPSを見る

サーバー知識を年収に
「ITエンジニア転職」

転職エージェントを見る

コメント