5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

openssl.cnfを改変せずにopensslコマンドでSAN情報を付加した証明書発行要求(CSR)を作成する

Last updated at Posted at 2020-01-03

:information_source: この記事は別サイトで執筆したopenssl.cnfを改変せずにopensslコマンドでSAN情報を付加した証明書発行要求(CSR)を作成する – ひつじぶどうの内容を転載しています。

はじめに

どうも‪‪✋(´・ᴗ・` )‬
opensslコマンドでSAN情報を付加したCSRを発行したくなったのですが, ググっても openssl.cnf をいじる方法ばかり出てきて苦戦したので忘備録です。
複数のサーバーに対するCSRを手元のMacで作って認証局に投げたいので, それでは困るんです。
ちなみに openssl.cnf はLinuxだと /etc/pki/tls/openssl.cnf, macOSだと /System/Library/OpenSSL/openssl.cnf にあるようです。

SAN情報を付加したくなるケース

いろいろあると思うんですが, DNSにCNAMEを設定していて2つのURLから1つのWebページにアクセスできる環境とか, サーバーを冗長化していてユーザーはVIPに振られているURLからWebサイトにアクセスするとかそういうケースで必要になるかと思います。
あとは自己証明書を使っている場合, DNS情報の記載がないとエラーが出るようになっているようですのでその対策とかでしょうか。

どこに付加するの?

Common NameやCountry等を記録するサブジェクト領域とは別にある, 「SAN(Subject Alter Name)」という拡張領域に付加します。
ここに複数のFQDNを記録することで, サブジェクトのCommon Nameに記載したWebサイト以外の証明書として使用できるようになります。

手順

以下でCSR発行の手順を説明します。

実行環境

この記事を執筆した際は下記の環境で実施しています。

項目
OS macOS Mojave
OS Version 10.14.5
OpenSSL Version 2.6.5

秘密鍵の作成

まずはCSRを作成するための秘密鍵を作成します。
鍵の長さは任意で良いですが, 今回は2048bitで。

$ openssl genrsa 2048 > rumraisin.key

設定ファイルの作成

SANを指定するために設定ファイルを作成し, 証明書に載せたいDNS情報をそこに記述します。
[ req ], [ req_distinguished_name ], [ req_ext ], [ alt_names ]各セクションには下記のものを記述します。

セクション 説明
[ req ] 証明書発行要求に関する設定を記述するセクションです。
[ req_distinguished_name ] [ req ]のサブセクションで, CN等の要素を対話的に入力する際のメッセージや各要素のデフォルト値を記述します。
[ req_ext ] 証明書発行要求のための拡張情報を記載するセクションです。
[ alt_names ] Subject Alter Nameを記述します。

設定ファイル(今回はrumraisin.cnf)を作成し, 下記の内容を記載します。

[ req ]
default_bits       = 2048
distinguished_name = req_distinguished_name
req_extensions     = req_ext
[ req_distinguished_name ]
countryName                = Country Name (2 letter code)
stateOrProvinceName        = State or Province Name (full name)
localityName               = Locality Name (e.g, city)
organizationName           = Organization Name (e.g, company)
commonName                 = Common Name (e.g. server FQDN or YOUR name)
[ req_ext ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = rumraisin.tokyo
DNS.2 = rumraisin.dev

[ req ], [ req_distinguished_name ], [ req_ext ]の各セクションは必要に応じて変更してください。
rumraisin.cnfの作成が終わったら準備は完了です。
下記のコマンドを打ってCSRを作成します。

$ openssl req -new -key rumraisin.key -config rumraisin.cnf -out rumraisin.csr

対話型が嫌いな方はワンライナーでもできたと思いますが, 私は嫌いではないので対話型で必要な情報を入力しました。

$ openssl req -new -key rumraisin.key -config rumraisin.cnf -out rumraisin.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) []:JP
State or Province Name (full name) []:Kumamoto
Locality Name (e.g, city) []:Fuyuki-shi
Organization Name (e.g, company) []:Raisin Lab.
Common Name (e.g. server FQDN or YOUR name) []:rumraisin.dev

念のために中身を確認します。

$ openssl req -text -noout -in rumraisin.csr
$ openssl req -text -noout -in rumraisin.csr
Certificate Request:
    Data:
        Version: 1 (0x0)
        Subject: C = JP, ST = Kumamoto, L = Fuyuki-shi, O = Raisin Lab., CN = rumraisin.dev
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                       ︙

これで中身が問題なければOKです。

参考にしたページ

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?