「組織単位(OU)を2つ設定しなければならない」「SAN(別名)の設定も必須」。
SAPなどの基幹システム用証明書を発行する際、このような複雑な要件に頭を抱えたことはありませんか?
通常のOpenSSL対話モードではこれらの設定に対応しきれず、かといって全て手入力すると、長い部署コードでタイプミスをしてしまうリスクがあります。
インフラ担当者にとって、その手戻りのリスクは大きなストレスです。
この記事では、Windows環境で標準機能を活用し、設定ファイルを使って面倒な入力作業を「自動化」する手順をご紹介します。
この方法を使えば、複雑な要件もコピペだけで確実にクリアできるようになります。

私自身も、過去に長い部署コードを一文字間違えてCSRを作り直し、冷や汗をかいた経験があります。この記事で確実な方法をマスターしましょう!
基礎知識
作業に入る前に、CSRの役割と全体の流れを整理します。
CSRの役割
CSR(Certificate Signing Request)とは、「証明書への署名要求(申請書)」のことです。
サーバーの公開鍵情報や、組織名(O)、組織単位(OU)、国コードなどの情報が含まれています。
全体フロー
CSR作成は、HTTPS通信を実現するための最初のステップです。全体像は以下のようになります。
- CSRの作成(今回の作業): サーバー上で秘密鍵とCSRを生成します。
- 認証局(CA)への提出: 作成したCSRをVeriSignなどのパブリックCAや、社内CAに提出します。
- 証明書の発行: CAが審査し、サーバー証明書(.crtなど)を発行します。
- インストール: 証明書と秘密鍵をサーバーにインストールします。
このCSR作成段階で「OU」や「SAN」の設定が漏れていると、証明書は作り直しになってしまいます。
設定ファイルの重要性
なぜ、WindowsでのCSR作成に設定ファイルが必要なのでしょうか?
対話モードの限界
OpenSSLの標準的な対話モードには、以下の壁があります。
- 複数OUの壁: 基本的にOUは1つしか入力できませんが、ポリシーによっては「部署コード」と「部署名」の2つが求められることがあります。
- SANの壁: 最近の必須要件である「SAN(Subject Alternative Name)」を、対話モードだけでは含めることができません。
これらを解決し、人為的ミスを防ぐ唯一の方法が、これから紹介する設定ファイル(cnf)の活用です。
導入手順
まずは環境構築です。インストーラーを探す必要はありません。
インストール
Windows 10/11以降であれば、標準搭載の管理ツールWingetを使用します。
管理者権限でコマンドプロンプトを開き、以下のコマンドを実行してください。
winget search openssl
winget install -e --id ShiningLight.OpenSSL.Lightディレクトリ移動
インストール完了後、作業用ディレクトリへ移動します。
cd C:\Program Files\OpenSSL-Win64\bin設定ファイル作成
ここが最重要ポイントです。「変えたくない部分は固定」し、「サーバーごとに変わる部分は手入力」にする設定ファイルを作成します。
記述例
メモ帳などのテキストエディタで san_config.cnf というファイルを作成し、以下の内容を保存してください。
ポイントは、番号を振って複数OUに対応させている点と、_default で固定値を埋め込んでいる点です。
※以下のコード内の部署コード(00000000)は、実際のコードに書き換えてください。
# OpenSSL SAN configuration file
[ req ]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = yes
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
stateOrProvinceName = State or Province Name (full name)
localityName = Locality Name (eg, city)
organizationName = Organization Name (eg, company)
# --- 2つのOU設定(固定値・自動入力) ---
# ここに部署コードや部署名を固定値として入れておきます
# "oisystem" 関連のコードもここで定義します
0.organizationalUnitName = Organizational Unit Name 1 (OU)
0.organizationalUnitName_default = 00000000
1.organizationalUnitName = Organizational Unit Name 2 (OU)
1.organizationalUnitName_default = oisystem Web AS
# -------------------------------------
commonName = Common Name (e.g. server FQDN)
emailAddress = Email Address
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[ alt_names ]
# 必要なSAN(DNS名)を記述
DNS.1 = oisystem-ap-v.aws.local動作イメージ
このファイルを使うと、入力プロセスは以下のようになります。
- OU(部署コード等): Enterキーを押すだけで、正確な値が自動入力されます。タイプミスを100%防げます。
- CN(サーバー名): その都度手入力が可能です。これにより、複数のサーバーで設定ファイルを使い回せます。
CSR生成
設定ファイルさえできれば、あとはコマンドを流すだけの単純作業です。
コマンド実行
作成した san_config.cnf を読み込ませてCSRを生成します。
openssl req -new -newkey rsa:2048 -nodes -keyout private.key -out server.csr -config san_config.cnf実行中、設定ファイルで _default を指定した箇所(OUなど)は値が表示された状態で止まりますので、そのまま Enterキー を押してください。
リネーム
生成されるファイルは private.key と server.csr です。
取り違えを防ぐため、生成直後に必ずリネームしましょう。ここでは自社基準の oisystem- プレフィックスを付与します。
ren private.key oisystem-ap-v_private.key
ren server.csr oisystem-ap-v_server.csr注意点
作業を確実にするため、以下の2点にご注意ください。
- 改行コードの崩れ: Web上のコードをコピペする際、セクション([ req ]など)の改行が崩れるとエラーになります。保存後に再確認してください。
- 作業パスの権限: Program Files 配下などは、書き込み権限がなくエラーになることがあります。その場合は管理者権限で実行するか、C:\Work などのフォルダで作業してください。
まとめ
複雑な要件を「手作業」や「気合」で乗り切ろうとすると、いつか必ずミスが起きます。
特に oisystem 関連のような重要システムでは、小さなミスが大きな遅延につながりかねません。
Wingetで環境を整え、設定ファイル(cnf)を活用することで、誰がやっても同じ品質でCSRを作成できるようになります。
まずはコマンドプロンプトを開き、 winget search openssl から始めてみてください。



コメント