自分への覚え書きを兼ねてまとめてみた。
#証明書のファイル形式の変換
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
無事にレスポンスボディが返ってくれば成功。