LoginSignup
1
2

More than 3 years have passed since last update.

PKCS #12形式のファイルをPEM形式に変換し、RubyでSSLクライアント認証する

Last updated at Posted at 2020-04-23

自分への覚え書きを兼ねてまとめてみた。

証明書のファイル形式の変換

OpenSSLコマンドを使う。

拡張子が.p12場合

$ openssl pkcs12 -in sample.p12 -out sample.pem

拡張子が.pfxの場合

$ openssl pkcs12 -in sample.pfx -out sample.pem

この場合、クライアント証明書ルート証明書秘密鍵がすべて出力されてしまうのでオプションを使う。

オプション 意味
-clcerts クライアント証明書を出力(ルート証明書は出力されない)
-cacerts ルート証明書を出力(クライアント証明書は出力されない)
-nokeys 秘密鍵が出力されない
-nocert 証明書が出力されない
-nodes 秘密鍵が暗号化されない

今回は、クライアント証明書と、暗号化された秘密鍵が欲しかったので、

$ openssl pkcs12 -in sample.p12 -out sample.pem -clcerts

秘密鍵のpassphraseが聞かれるので、入力すると変換終了。

RubyでSSLクライアント認証

net/httpsライブラリを使う。
基本はリファレンスを参考にすればよい。
アクセスを確認するためにGETメソッドを叩く。

certification.rb
require 'net/https'
require 'openssl'
require 'uri'

uri = URI.parse("アクセス先のURL")
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true
cert_file = './sample.pem'
pass = 'パスワード'
https.key = OpenSSL::PKey::RSA.new(File.read(cert_file), pass)       #秘密鍵の作成
https.cert = OpenSSL::X509::Certificate.new(File.read(cert_file))    #証明書の作成
https.verify_mode = OpenSSL::SSL::VERIFY_PEER
https.verify_depth = 5
https.start do
    request = Net::HTTP::Get.new(uri.request_uri)
    response = https.request(request)
    puts response.body
end

無事にレスポンスボディが返ってくれば成功。

1
2
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
1
2