One IT Thing

IT業界で飯を食う為の学習系雑記

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
-

執筆者:

関連記事

電子署名法で求められる「本人性」と「非改ざん性」の実現方法をざっくり理解する

2019年現在ではマイナンバーカードが流通し始め、インターネット上で公的な申請が完了できる体制が整いつつあります。 日本は古式ゆかしい申請制度がしっかりしているのでなかなか諸外国より電子化が進みません …

Javascript(暗号化JSライブラリ「Forge」)とp12ファイルで署名値を作成、Javaで検証する

前回、送信データの改ざんを検知する為、簡易的なセキュリティトークンであるPKCS#12形式のファイルを作成しました。  One IT Thing開発用のPKCS#12ファイルをOpenSSL …

pgcryptoの有効化と共通鍵暗号の動作確認

PostgreSQLで「pgcrypto」拡張機能を有効にすると、PostgreSQLに保存するデータを暗号化出来るようになります。 INSERTする際、共通鍵暗号はpgp_sym_encrypt関数 …

Chrome76でシークレットモード非検知を実現出来なかった件の検証

2019/07/30にChrome76がリリースされました。 76では以前からGoogleが問題視していた「閲覧者がシークレットモードでみているかどうか運営側が分かってしまう」が解決されるはずでした。 …

SNS他Webサービスの情報流出、セキュリティ事故に巻き込まれたかどうか調べる

FaceBookやCapital Oneなど、サービスに登録されたユーザ情報が漏洩する事件が日々取り沙汰されています。 「もしかしたら自分が登録した情報も漏れてるかもしれない」 そう思って気になったら …

 

Shingo Nakanishi
 

東京在勤、職歴20年越え中年ITエンジニアです。まだ開発現場で頑張っています。

19歳(1996年)から書き始めた個人日記が5,000日を超え、残りの人生は発信をして行きたいと思い、令和元日からこのサイトを開始しました。勉強と試行錯誤をしながら、自分が経験したIT関連情報を投稿しています。

私と同じく、今後IT業界で生計を立てて行きたいと考えている方や、技術共有したいけどフリーランスで孤独、といった方と一緒に成長、知識共有して行けたら楽しいな、と思っています。