$shibayu36->blog;

株式会社はてなでエンジニアをしています。プログラミングや読書のことなどについて書いています。

gistyをMacから使う

id:swdyhさんが作ったgisty(http://d.hatena.ne.jp/swdyh/20081207/1228655198)がSSLの問題で使えなくなっていたので、使えるようにしたときのメモ。

ca_fileを作成する

とにかくca_fileがないという問題なので以下のコマンドでca_fileを作成する。private.keyのところは自分の秘密鍵を指定してください。
ca_fileをmac上で作成してください。上の方法だと、秘密鍵が上書きされてしまいます...

open-urisslに対応させるように

以下のコマンドでopen-uriがデフォルトでどの証明書をつかっているかわかります。

ruby -ropenssl -e 'p OpenSSL::X509::DEFAULT_CERT_FILE'

場所がわかったら、そこに先程作った証明書を名前を合わせておきます。

ここまででsyncなどの機能が使えるようになりました。

net/httpsでca_fileを指定する

postの機能はnet/httpsをつかっているため、上の設定では変更できません。
そこでlib/gisty.rbを変更します。https.ca_fileには

  def post params
    url = URI.parse('https://gist.github.com/gists')
    req = Net::HTTP::Post.new url.path
    req.set_form_data params
    https = Net::HTTP.new(url.host, url.port)
    https.use_ssl = true
    https.verify_mode = OpenSSL::SSL::VERIFY_PEER
    https.verify_depth = 5
+   https.ca_file = "/opt/local/etc/openssl/cert.pem"
    res = https.start {|http| http.request(req) }
    case res
    when Net::HTTPSuccess, Net::HTTPRedirection
      res['Location']
    else
      raise PostFailureException, res.inspect
    end
  end