下記コードから生成される「amazon.pem」と FireFox から取得する PEM (証明書パスを含む X509 証明書)の内容が異なるのは何故でしょうか? Ruby で取得した PEM を指定して、net/https を使うとエラーが出ます。後者の PEM はエラーが発生しません。
文字数制限のため詳細を掲載できませんが、Ruby は2つの証明書、FireFoxは3つの証明書ができていました。
あと PEM とか DER、 CER 等いまいち理解していないので、参考になる WEB サイトを教えて頂けると幸いです。
---------- Ruby のコード ----------
require 'socket'
require 'openssl'
require 'uri'
include OpenSSL
uri = URI('https://affiliate.amazon.co.jp/gp/associates/join/landing/main.html')
soc = TCPSocket.new(uri.host, 443)
ssl = SSL::SSLSocket.new(soc)
ssl.connect
ssl.write("GET #{uri.request_uri} HTTP/1.0\n")
ssl.write("User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4\n")
ssl.write("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\n")
ssl.write("Accept-Language: ja,en-us;q=0.7,en;q=0.3\n")
ssl.write("Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7\n")
ssl.write("\r\n\r\n")
pem = ssl.peer_cert_chain.to_s
ssl.close
soc.close
fp = File.open('amazon.pem', 'w+')
fp.puts pem
fp.close