「無料」では買えない、「信頼」がある。
こんにちは!「LINUX工房」管理人の「リナックス先生」です。
前回は、無料の「Let’s Encrypt」を使って、コストをかけずにWebサイトをHTTPS化する方法を学びました。個人のブログやテスト環境なら、正直あれで十分です。
しかし、あなたがもし「企業の公式サイト」や「クレジットカード情報を扱うECサイト」の担当者だとしたら、話は別です。
「誰でも匿名で取れる無料証明書」では、お客様に対する「実在証明」としては不十分な場合があるのです。
先生、ちょっと待ってください。
前回「Let’s Encryptでも暗号化の強度は変わらない」って言いましたよね?
鍵マークが出るなら、見た目は一緒じゃないですか。
わざわざ年間数万円、高いものだと10万円以上払って有料の証明書を買う意味って、本当にあるんですか?
いい質問ね、コウ君。
技術的な暗号化強度は同じでも、「審査の厳しさ」が違うの。
有料の証明書(特にOV/EV)は、認証局が「この会社は実在するか?」「電話番号は本物か?」まで徹底的に調べてから発行するわ。
つまり、証明書自体が「このサイトの運営元は、怪しい詐欺グループではなく、実在する〇〇株式会社です」という身分証明書になるのよ。
今回は、エンジニアとして避けては通れない、認証局(CA)への申請プロセスとインストール作業を解説します。
Certbotのような自動ツールは使えません。全て手動コマンド(OpenSSL)で行う、プロの技を習得しましょう。
🔒 Apache SSL/TLS 完全攻略講座(バックナンバー)
現在地:【第3回】企業サイトならこれ!有料証明書(JPRS/GlobalSign)のCSR生成とインストール
- 【第1回】Webサーバーの常時SSL化!TLSの仕組みと自己署名証明書の作成
- 【第2回】無料証明書のスタンダード!Let’s Encrypt (Certbot) の導入と自動更新
- 【第3回】企業サイトならこれ!有料証明書(JPRS/GlobalSign)のCSR生成とインストール
- 【第4回】セキュリティ強度を上げる!プロトコル(TLS1.3)と暗号スイートの最適化
- 【第5回】1つのIPで複数ドメイン!バーチャルホストでのSSL設定とSNIの仕組み
- 【第6回】「繋がらない」を解決!中間証明書チェーンとトラブルシューティング
- 【第7回】運用を楽にする!証明書期限監視と更新プロセスの自動化
- 【第8回】大規模構成!ロードバランサ連携とHTTP/2・HTTP/3 (QUIC) 対応
第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のように「コマンド一発で終わり」ではありません。
- 秘密鍵の作成: サーバー上で秘密鍵を作る(OpenSSL)。
- CSRの作成: 秘密鍵を元に「署名要求(CSR)」を作る。ここに会社情報を埋め込む。
- 申し込み: 認証局(JPRSなど)にCSRを送って申請する。
- 審査: 書類審査や電話確認が行われる(数日かかる場合も)。
- 発行: 審査に通ると、サーバー証明書と中間証明書が送られてくる。
- インストール: 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」で自分専用環境
サーバー知識を年収に
「ITエンジニア転職」

コメント