現在、Cucumber を使用してシステムをテストしています。その一部には、SSL クライアント証明書を使用したリモート .NET サーバーでの認証が含まれます。この .NET システムの開発者は、次のような .pem ファイルの形式でこの証明書を提供してくれました。
-----BEGIN CERTIFICATE-----
MIIFzTCCBLWgAwIBAgIKHNfvKAAAAAAAFDANBgkqhkiG9w0BAQUFADBKMRMwEQYK
...more lines...
aaG0c6enKQJiVcA4myLkBkN/wxiZsnBy/zGdj+u4RurxcS717FKm7oYY3JsuRSRH
Ow==
-----END CERTIFICATE-----
接続に使用しているコードは次のようになります ( http://www.rubyinside.com/nethttp-cheat-sheet-2940.htmlから取得):
uri = URI.parse("https://secure.com/")
pem = File.read("/path/to/my.pem")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.cert = OpenSSL::X509::Certificate.new(pem)
http.key = OpenSSL::PKey::RSA.new(pem)
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Get.new(uri.request_uri)
ただし、「http.key = OpenSSL::PKey::RSA.new(pem)」という行では、次の例外が発生します。
Neither PUB key nor PRIV key:: nested asn1 error (OpenSSL::PKey::RSAError)
私はもともと HTTParty を使用してリクエストを作成していましたが、同じ問題があり、基本的に HTTParty 自体の同じ行を追跡しました。
私が与えられたこの証明書は、証明書オブジェクトを作成するために OpenSSL::X509::Certificate.new に渡すことができますが、OpenSSL::PKey::RSA のインスタンスを作成するために使用することはできません。キーを設定する行を削除しようとしましたが、認証に失敗します。これは実際に私がやるべきことであり、認証が何らかの理由で失敗している可能性がありますが、他の場所の問題を掘り下げる前に、ここで何が起こっているのかについてより明確な考えが必要です.
この SO の質問から: Ruby で公開鍵を作成するときに、「PUB キーでも PRIV キーでもない :: ネストされた asn1 エラー」が発生する原因は何ですか? ... どうにかして pem ファイルに秘密鍵を含める必要があるように見えますが、.NET 開発者はこれは必要ないと考えているようです。
.NET 開発者を突き止めて、彼らの認証がどのように機能するかについて明確なアイデアを得ることは困難であることが判明しており、オンラインでも明確な情報を見つけることができないようです. 誰でもこれに光を当てることができますか?