OpenSSLでCSRと秘密鍵を同時作成する方法と各種オプションの説明

2020年8月7日

サーバー
Security

OpenSSLでCSRと秘密鍵を同時作成した方法の備忘録

どうも、テック備忘LOGのYuki(@tech_bibo_log)です!!

今回はSSL証明書の更新作業でOpenSSLを使ってCSRを作成する機会があったので、手順を残したいと思います。

秘密鍵とCSRファイルを同時に生成するコマンドを紹介していきます。

それでは、始めましょう!

[ 目次 (開く) ]

CSRとは?

一応CSRについて紹介しておこうと思います。

CSRとは『Certificate Signing Request』の頭文字を取ったもので、
認証局(CA)に対し、SSLサーバ証明書への署名を申請するためのものです。

Yuki



CSRの生成手順

OpenSSLの次のコマンドを実行します。
いくつかの質問がありますので答えていきます。

Yuki

聞かれる質問一覧

  • 質問1:    国
  • 質問2:    都道府県
  • 質問3:    市
  • 質問4:    組織名
  • 質問5:    部署名
  • 質問6:    ドメイン名
  • 質問7:    メールアドレス 
  • 質問8:    パスワード
  • 質問9:    確認パスワード 

現在の場所 /home

# openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr
 Generating a 2048 bit RSA private key
...........................+++
....................................................................................+++
writing new private key to 'server.key'
-----
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) [XX]: ここに国名を記入 (例:『日本』
State or Province Name (full name) []:  ここに都道府県名を記入 (例:『Osaka』
Locality Name (eg, city) [Default City]: ここに市名を記入 (例:『Osaka』
Organization Name (eg, company) [Default Company Ltd]: ここに組織名を記入 (例:『hogehoge.inc』
Organizational Unit Name (eg, section) []: ここに部署名を記入 (例:『security section』
Common Name (eg, your name or your server's hostname) []: ここにドメイン名を記入 (例:『example.com』
Email Address []: ここにメールアドレスを記入 (例:『空白』や『hoge@hoge.com』
Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: ここにパスワード(任意)を記入 (例:『空白』や『password』
A challenge password []: ここに確認用パスワード(任意)を記入 (例:上と同じものを記入すること

以上でCSRの生成は完了です。

/home でコマンドを実行したので、次の場所に2つのファイルが生成されていると思います。
秘密鍵ファイル: /home/server.key
CSRファイル : /home/server.csr

OpenSSLとコマンドオプションの内容

今回使用するOpenSSLとそのオプションについて説明します。

REQコマンド

主にPKCS#10形式の証明書要求を作成し、処理します。さらに、たとえばルートCAとして使用するための自己署名証明書を作成できます。

openssl req [-inform PEM|DER] [-outform PEM|DER] [-in filename] [-passin arg] [-out filename] [-passout arg] [-text] [-pubkey] [-noout] [-verify] [-modulus] [-new] [-rand file(s)] [-newkey rsa:bits] [-newkey alg:file] [-nodes] [-key filename] [-keyform PEM|DER] [-keyout filename] [-keygen_engine id] [-[digest]] [-config filename] [-multivalue-rdn] [-x509] [-days n] [-set_serial n] [-asn1-kludge] [-no-asn1-kludge] [-newhdr] [-extensions section] [-reqexts section] [-utf8] [-nameopt] [-reqopt] [-subject] [-subj arg] [-batch] [-verbose] [-engine id]


-new

このオプションは、新しい証明書要求を生成します。


-newkey arg

このオプションを使用すると、新しい証明書要求と新しい秘密鍵を作成します。
引数は、いくつかの形式のいずれかを取ります。

- rsa:nbits(nbitsはビット数)
 nbitsを省略した場合、つまり-newkey rsaを指定した場合は、構成ファイルで指定されたデフォルトの鍵サイズが使用されます。

他のすべてのアルゴリズムは-newkey alg:file形式をサポートします。詳細は省略します。
例)
- dsa:filenameなど


-keyout

PEM形式の秘密鍵の出力先とファイル名を指定できます。
このオプションを使用しなかった場合のデフォルトのファイル名はprivkey.pemです。


-out

CSRファイルの出力先を指定します。
このオプションを使用しなかった場合、CSRファイルの内容がコンソール上に標準出力されます。


-nodes

このオプションを使用した場合、PEM形式の秘密鍵ファイルは暗号化されません。
-nodesを使用しない(暗号化した)場合:

server.key
-----BEGIN ENCRYPTED PRIVATE KEY-----
        文字列
-----END ENCRYPTED PRIVATE KEY-----

-nodesを使用した(暗号化しなかった)場合:

server.key
-----BEGIN PRIVATE KEY-----
      文字列
-----END PRIVATE KEY-----

CSRのパスフレーズを解除

上記の手順で-nodesオプションを使用しない場合、パスフレーズが設定され暗号化された秘密鍵(server.key)が生成されます。
その場合Webサーバーの再起動時にエラーになる可能性があります。
パスフレーズが分からない場合、Webサーバは秘密鍵の内容を取得できないためです。

以下の方法でパスワードを解除することが可能です。

# openssl rsa -in server.keyのPath -out server.keyの出力先のPath
例)openssl rsa -in /root/server.key -out /root/server.key  ※上書きしている

簡単ですね。
OpennSSLを使用したCSRの生成方法の紹介は以上です。
ありがとうございました。