PKCS
Public Key Cryptography Standards
公開鍵暗号標準のグループ.
公開鍵証明書、秘密鍵をパスワード形式で暗号化している
複数の組み込みオブジェクト、例えば複数の証明書を格納できるコンテナフォーマットである。通常、パスワードにより保護/暗号化される。
PKCS12形式の拡張子は、.p12
OpenSSLを用いて、データを取り出せる
クラアント証明書
openssl pkcs12 -in xxxx.p12 -clcerts -nokeys -out client.crt -passin 'pass:hogehoge' --legacy
秘密鍵
openssl pkcs12 -in xxxx.p12 -nocerts -nodes -out client.key -passin 'pass:hogehoge' --legacy
あらかじめ証明書・秘密鍵を抽出しておくバージョン
code: example.rb
# HTTPリクエストを準備
uri = URI.parse(API_URL)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
# openssl pkcs12 -in <p12ファイル> -clcerts -nokeys -out client.crt -passin 'pass:<PIN>' --legacy
http.cert = OpenSSL::X509::Certificate.new(File.read('client.crt'))
# openssl pkcs12 -in <p12ファイル> -nocerts -nodes -out client.key -passin 'pass:<PIN>' --legacy
http.key = OpenSSL::PKey::RSA.new(File.read('client.key'))
# POSTリクエストを送信
request = Net::HTTP::Post.new(uri.path, {'Content-Type' => 'application/json'})
request.body = data.to_json
response = http.request(request)
puts response.body
そのまま利用するバージョン
code:example.rb
# PKCS12_parse: unsupportedになるので、legacyを指定する
OpenSSL::Provider.load("default")
OpenSSL::Provider.load("legacy")
# .p12証明書を読み込む
cert = OpenSSL::PKCS12.new(File.read(P12_FILE), P12_PASSWORD)
# HTTPリクエストを準備
uri = URI.parse(API_URL)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.cert = cert.certificate
http.key = cert.key
request = Net::HTTP::Post.new(uri.path, {'Content-Type' => 'application/json'})
request.body = data.to_json
response = http.request(request)
# レスポンスの内容を表示
puts response.body