security

開発用のPKCS#12ファイルをOpenSSLで出来るだけ速く作る

投稿日:

「電子署名法」に則るにはセキュリティトークンが必要で、デジタル署名をちょっと試したいケースならPKCS#12が手っ取り早いです。

今回は可能な限り速く、開発に使えるテスト用のPKCS#12ファイルを作ります。
OpenSSLが入っているなら以下の4コマンドで作れます。

  1. openssl genrsa -aes256 -out ./prvkey.pem 2048
  2. openssl req -new -key ./prvkey.pem -out req.csr
  3. openssl x509 -req -in req.csr -signkey prvkey.pem -out pubkey.crt -days 36500
  4. openssl pkcs12 -export -in pubkey.crt -inkey prvkey.pem -out forTest.p12

また、以下の記事のようにオレオレなサーバ証明書を作って使っている場合、サーバ証明書とサーバ秘密鍵を4番目のコマンド纏めてしまえば1コマンドでテスト用p12ファイルの完成です。

サクッと作れるようにして行きましょう。

今回作るもの

リモートに申請する際にデジタル署名を掛ける為のp12(PKCS#12)ファイルを作ります。

環境

  • Windows 10
  • Cygwin
  • openssl 1.1.1c
C:\openssl>openssl version
OpenSSL 1.1.1c  28 May 2019

C:\openssl>which openssl
/usr/bin/openssl

未インストールの場合は以下から1.1.1をインストール。

p12ファイル作成手順

1.秘密鍵作成

openssl genrsa -aes256 -out ./prvkey.pem 2048

C:\openssl>openssl genrsa -aes256 -out ./prvkey.pem 2048
Generating RSA private key, 2048 bit long modulus (2 primes)
.....................................+++++
....................................+++++
e is 65537 (0x010001)
Enter pass phrase for ./prvkey.pem: (hogehoge)
Verifying - Enter pass phrase for ./prvkey.pem:

2.証明書リクエスト作成

openssl req -new -key ./prvkey.pem -out req.csr

C:\openssl>openssl req -new -key ./prvkey.pem -out req.csr
Enter pass phrase for ./pubkey.pem:
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]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:Katsushika
Organization Name (eg, company) [Default Company Ltd]:(会社名)
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

3.証明書付き公開鍵作成

openssl x509 -req -in req.csr -signkey prvkey.pem -out pubkey.crt -days 36500

C:\openssl>openssl x509 -req -in req.csr -signkey prvkey.pem -out pubkey.crt -days 36500
Signature ok
subject=C = JP, ST = Tokyo, L = Katsushika, O = (会社名)
Getting Private key
Enter pass phrase for prvkey.pem: (hogehoge)

4.p12ファイル作成

秘密鍵、証明書付き公開鍵を1ファイルに纏めたファイルを作成します。

openssl pkcs12 -export -in pubkey.crt -inkey prvkey.pem -out forTest.p12

C:\openssl>openssl pkcs12 -export -in pubkey.crt -inkey prvkey.pem -out forTest.p12
Enter pass phrase for prvkey.pem: (hogehoge)
Enter Export Password:(hogehoge)
Verifying - Enter Export Password:(hogehoge)

パスワードが「hogehoge」のp12ファイルが出来ました。OpenSSLさえ入っていれば数分で作れますね。

次回は今回作ったforTest.p12ファイルで電子署名をかけ、署名値の検証をしてみます。

-security
-

執筆者:

関連記事

H2 Databaseで生成したSHA256値をJavaで生成したSHA256値と比較してみる

ファイル、サーバ、メモリ、様々な動作形態がとれてプロトタイピングや、配布アプリの組み込みDBとして便利に使えるPure Javaデータベースの「H2」。 h2database.com  2 …

ブラウザでRSA暗号化したデータをサーバで復号する(Angular + JSEncrypt、Spring MVC)【前編】

セキュリティ的にクリティカルなデータをクライアントブラウザで暗号化保存するようにしてみます。 通信経路はHTTPSで暗号化されていてもスマホに重要なデータが平文で残っていたら珠に傷です。 目次1 環境 …

主要ブラウザに保存させたパスワードの確認方法を比較してみる

アクセスしたサイトのパスワードをブラウザに覚えてもらったけどなんて入れたっけ? なんてことが稀にあったりします。各種ブラウザとも覚えさせたパスワードは後から確認が出来るのでそれぞれの方法を確認します。 …

pgcryptoで公開鍵暗号の動作確認

共通鍵暗号で暗号化されたデータはパスワードが漏洩すると復号される危険が高まるのに対し、公開鍵暗号で暗号化されたデータは秘密鍵とパスワードの二つが漏洩しないと復号できません。 APサーバとDBサーバ通信 …

CentOSで暗号鍵用のパスワードを生成

そこそこ長くて文字種の入り混じった強度の高いものを自分で考えるのは面倒です。 暗号化処理を使う際に必要なパスワード文字列を、mkpasswdコマンドでいい感じに生成出来るようにしておきます。 目次1 …

 

shingo.nakanishi
 

東京在勤、1977年生まれ、IT職歴2n年、生涯技術者として楽しく生きることを目指しています。デスマに負けず健康第一。