Full Code of substrakt/letsencrypt-heroku for AI

master 1175ddea6148 cached
44 files
306.2 KB
148.3k tokens
80 symbols
1 requests
Download .txt
Showing preview only (322K chars total). Download the full file or copy to clipboard to get everything.
Repository: substrakt/letsencrypt-heroku
Branch: master
Commit: 1175ddea6148
Files: 44
Total size: 306.2 KB

Directory structure:
gitextract_u6xi85wh/

├── .dockerignore
├── .gitignore
├── .travis.yml
├── Dockerfile
├── Gemfile
├── LICENCE.md
├── Procfile
├── README.md
├── Rakefile
├── app.json
├── app.rb
├── config/
│   └── puma.rb
├── config.ru
├── docker-compose.yml
├── lib/
│   ├── acme_client_registration.rb
│   ├── certificate_generation.rb
│   ├── certificate_generator.rb
│   ├── challenge.rb
│   ├── cloudflare_challenge.rb
│   ├── logger.rb
│   └── provisioners/
│       └── heroku.rb
├── test/
│   ├── acme_client_registration_test.rb
│   ├── app_test.rb
│   ├── certificate_generator_test.rb
│   ├── cloudflare_challenge_test.rb
│   ├── fixtures/
│   │   └── vcr_cassettes/
│   │       ├── acme-challenge-debug.yml
│   │       ├── acme-new-authz.yml
│   │       ├── acme-new-reg-debug.yml
│   │       ├── acme-new-reg.yml
│   │       ├── check-cloudflare-authentiation-failure.yml
│   │       ├── check-cloudflare-authentiation-success.yml
│   │       ├── check-heroku-authentication-failure.yml
│   │       ├── check-heroku-authentication-succeed.yml
│   │       ├── new-cert-provisioner-heroku-success.yml
│   │       ├── new-cert-provisioner-heroku.yml
│   │       ├── new-certificate-debug.yml
│   │       ├── new-reg-debug-2.yml
│   │       └── new-reg-debug-3.yml
│   ├── logger_test.rb
│   ├── provisioners/
│   │   └── heroku_test.rb
│   └── test_helper.rb
└── workers/
    ├── base.rb
    ├── cloudflare_challenge_worker.rb
    └── worker.rb

================================================
FILE CONTENTS
================================================

================================================
FILE: .dockerignore
================================================
.git/*


================================================
FILE: .gitignore
================================================
.env


================================================
FILE: .travis.yml
================================================
sudo: required
services:
  - docker

rvm:
  - 2.3.3

script:
  - cp .env.sample .env
  - docker-compose run --rm web rake


================================================
FILE: Dockerfile
================================================
FROM ruby:2.3

ENV APP_HOME /opt/letsencrypt-heroku
RUN mkdir /opt/letsencrypt-heroku
WORKDIR $APP_HOME

ADD Gemfile* $APP_HOME/

ENV BUNDLE_GEMFILE=$APP_HOME/Gemfile \
  BUNDLE_JOBS=2 \
  BUNDLE_PATH=/bundle

RUN bundle install


================================================
FILE: Gemfile
================================================
source 'https://rubygems.org'

ruby '2.3.3'

gem 'sinatra'
gem 'json-jwt', '1.5.2'
gem 'acme-client'
gem 'cloudflare'
gem 'puma'
gem 'httparty'
gem 'dotenv'
gem 'sidekiq'
gem 'redis'
gem 'rake'
gem 'minitest'
gem 'rack-test'
gem 'vcr'
gem 'webmock'


================================================
FILE: LICENCE.md
================================================
The MIT License (MIT)

Copyright (c) 2016 Substrakt

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: Procfile
================================================
web: bundle exec puma -C config/puma.rb
worker: bundle exec sidekiq -q default -r ./workers/base.rb -c 2


================================================
FILE: README.md
================================================
# letsencrypt-heroku

# Deprecated: This project is no longer maintained. You should use [Automated Certificate Management](https://devcenter.heroku.com/articles/automated-certificate-management) from Heroku instead.

---

[![Code Climate](https://codeclimate.com/github/substrakt/letsencrypt-heroku/badges/gpa.svg)](https://codeclimate.com/github/substrakt/letsencrypt-heroku)
[![Build Status](https://travis-ci.org/substrakt/letsencrypt-heroku.svg?branch=master)](https://travis-ci.org/substrakt/letsencrypt-heroku)

**This is the master branch. It contains all the latest changes and should not be used in production unless you know what you're doing.** While `master` is supposed to be in a usable state, it may (and probably will) contain breaking changes from the last release.

**Current stable release is [3.1.1](https://github.com/substrakt/letsencrypt-heroku/releases/tag/3.1.1)**

> Let's make *everything* secure.

With the advent of free SSL and Heroku finally offering free SSL endpoints, it's about time we made it ridiculously easy to get an SSL cert for any Heroku application and keep it up to date.

We wrote a blog post about it [here](https://substrakt.com/heroku-ssl-me-weve-come-a-long-way/)

[![Substrakt Logo](http://birmingham-made-me.org/wp-content/uploads/2014/03/substrakt-logo-300x55.png)](https://substrakt.com/)

Created by [Substrakt](https://substrakt.com).

## What it does
1. Provides an API to generate SSL certificates.
1. Generates SSL certificates using DNS records to validate ownership.

## Limitations
1. DNS must be managed by CloudFlare.

## Installation

You can install letsencrypt-heroku either directly on to Heroku, use Docker Compose or download the code and deploy it yourself anywhere you can run a Rack app.

First off, you'll need a Heroku auth token.

1. `heroku plugins:install heroku-cli-oauth`
1. `heroku authorizations:create -d "letsencrypt-heroku"`
1. Save the token from this. We'll use it later.

### Installation on Heroku

1. Deploy automatically to Heroku using this button: [![Deploy](https://www.herokucdn.com/deploy/button.png)](https://heroku.com/deploy?template=https://github.com/substrakt/letsencrypt-heroku/tree/master)
1. Input all the required parameters as asked for by the Heroku setup wizard. This includes the heroku token from above.
1. This will set up the application and all dependencies automatically including a free instance of Heroku Redis. (Redis is used to process background jobs amongst other things.)
1. On the command line run `heroku config:get AUTH_TOKEN`. The response is the secret token. **Every request made to the API must have the query parameter `auth_token=TOKEN` added to it. You'll receive a 403 error if you forget to do this.**

### Run using Docker Compose

This application comes with a `docker-compose.yml` file. Assuming you have Docker installed, you can run `docker-compose up` and you'll be up and running immediately.

### Installation elsewhere
You can deploy this application anywhere you can run a Rack app. (Azure, Heroku, AWS, local, etc.)

1. Download the repo `git clone https://github.com/substrakt/letsencrypt-heroku.git`
1. Install Redis. (`brew install redis`)
1. Install foreman (`gem install foreman`)
1. Copy `.env.sample` to `.env` using `cp .env.sample .env`. The `.env` file is read when the application starts and should contain all of the required environment variables. One of these is the token generated earlier for Heroku. **DO NOT COMMIT THIS FILE TO SOURCE CONTROL**
1. Run the application locally using `foreman start`.
1. Deploy however you want to!

## Usage
1. Hit the following endpoint:

```
POST /certificate_request

{
	"auth_token": "CHOSEN AUTH TOKEN",
	"domains": ["www.substrakt.com", "substrakt.com"],
	"zone": "CLOUDFLARE DOMAIN ZONE NAME (NOT ID)",
	"heroku_app_name": "NAME OF HEROKU APP",
	"cloudflare_api_key": "API KEY OF CLOUDFLARE ACCOUNT",
	"cloudflare_email": "CLOUDFLARE EMAIL ADDRESS",
	"heroku_oauth_token": "HEROKU OAUTH TOKEN"
}
```


This will start the process in the background and output something like this:

```
{
  "status": "queued",
  "uuid": "a97fc5e2fce7bc60a96aa4c3e4907152",
  "url": "http://0.0.0.0/certificate_request/a97fc5e2fce7bc60a96aa4c3e4907152?auth_token=testtesttest"
}
```

That API URL will give you updates as to the certificate generation process. You should poll this to check how it's going. Redis is used as a store for status updates as well as the backend for Resque.

The output looks something like this:

```
{"status":"finished","message":"Generated certificate"}
```



**That's it.**

## Contributing
Pull requests and issues are very much welcome at this early stage.


================================================
FILE: Rakefile
================================================
task :default => :test
task :test do
  Dir.glob('./test/*_test.rb').each { |file| require file}
end


================================================
FILE: app.json
================================================
{
  "name": "letsencrypt-heroku",
  "description": "Let's make all of Heroku secure.",
  "keywords": [
    "ssl",
    "security"
  ],
  "website": "https://substrakt.com/",
  "repository": "https://github.com/substrakt/letsencrypt-heroku",
  "env": {
    "HEROKU_OAUTH_KEY": {
      "description": "A valid OAuth key to access your Heroku appications."
    },
    "AUTH_TOKEN": {
      "description": "A random token to authenticate all requests to the API. Treat this like a password.",
      "generator": "secret"
    },
    "CONTACT_EMAIL": {
      "description": "A contact email address for LetsEncrypt to inform of revokcations and expirations."
    }
  },
  "formation": {
    "web": {
      "quantity": 1,
      "size": "Free"
    },
    "worker": {
      "quantity": 1,
      "size": "Free"
    }
  },
  "image": "heroku/ruby",
  "addons": [
    {
      "plan": "heroku-redis:hobby-dev"
    }
  ],
  "buildpacks": [
    {
      "url": "heroku/ruby"
    }
  ]
}


================================================
FILE: app.rb
================================================
require 'sinatra'
require 'dotenv'
require 'sidekiq'
Dotenv.load

require_relative 'workers/cloudflare_challenge_worker'

$redis = Redis.new(url: ENV['REDIS_URL'])

before do
  request.body.rewind
  if request.body.size > 0
    @request_payload = JSON.parse(request.body.read)
  end
end

post '/certificate_request' do
  content_type :json
  authenticate!
  if params_valid?
    status 200
    token = SecureRandom.hex
    $redis.setex("status_#{token}", 3600, "queued")
    CloudflareChallengeWorker.perform_async(@request_payload["zone"], @request_payload["domains"], token, @request_payload["heroku_app_name"], false, { email: @request_payload['cloudflare_email'], api_key: @request_payload['cloudflare_api_key'] }, heroku: { oauth_key: @request_payload['heroku_oauth_token']})
    { status: 'queued', uuid: token, url: "#{request.env['rack.url_scheme']}://#{request.env['HTTP_HOST']}/certificate_request/#{token}?auth_token=#{ENV['AUTH_TOKEN']}" }.to_json
  else
    status 422
  end
end

get '/certificate_request/:token' do
  content_type :json
  authenticate!
  if $redis.exists("status_#{params["token"]}")
    status 200
    return { status: $redis.get("status_#{params["token"]}"), message: $redis.get("latest_#{params["token"]}")}.to_json
  end
  status 404
  { status: "#{params["token"]} not a valid token" }.to_json
end

private

def params_valid?
  @request_payload["domains"].present? && @request_payload["heroku_app_name"].present? && @request_payload["zone"].present?
end

private

def authenticate!
  unless (params["auth_token"] == ENV['AUTH_TOKEN']) || (@request_payload["auth_token"] == ENV['AUTH_TOKEN'])
    halt 403
  end
end


================================================
FILE: config/puma.rb
================================================
workers 2
threads_count = 5
threads threads_count, threads_count

rackup      DefaultRackup
port        ENV['PORT']     || 3000
environment ENV['RACK_ENV'] || 'development'


================================================
FILE: config.ru
================================================
require './app'
run Sinatra::Application


================================================
FILE: docker-compose.yml
================================================
version: '2'
services:
  redis:
    image: redis
    ports:
      - "6379:6379"

  sidekiq:
    build: .
    restart: always
    env_file: .env
    volumes:
      - .:/opt/letsencrypt-heroku
    command: 'bundle exec sidekiq -q default -r ./workers/base.rb -c 2'
    working_dir: /opt/letsencrypt-heroku

  web:
    depends_on:
      - redis
    build: .
    links:
      - redis
    restart: always
    env_file: .env
    volumes:
      - .:/opt/letsencrypt-heroku
    command: 'bundle exec puma -C config/puma.rb'
    working_dir: /opt/letsencrypt-heroku
    ports:
      - '4567:4567'
    environment:
      PORT: 4567


================================================
FILE: lib/acme_client_registration.rb
================================================
require 'acme-client'

class AcmeClientRegistration

  class NoEmailError < StandardError; end;

  DEBUG_ENDPOINT = "https://acme-staging.api.letsencrypt.org/"
  LIVE_ENDPOINT  = "https://acme-v01.api.letsencrypt.org/"

  attr_reader :endpoint, :client

  def initialize(options = {})
    raise NoEmailError if ENV['CONTACT_EMAIL'].nil?
    if options[:debug] == true
      @endpoint = DEBUG_ENDPOINT
    else
      @endpoint = LIVE_ENDPOINT
    end

    @client = Acme::Client.new(private_key: OpenSSL::PKey::RSA.new(4096), endpoint: @endpoint)
    registration = @client.register(contact: "mailto:#{ENV['CONTACT_EMAIL']}")
    registration.agree_terms
  end

end


================================================
FILE: lib/certificate_generation.rb
================================================
require 'openssl'
require 'acme-client'
require 'cloudflare'
require 'resolv'
require 'digest'
require 'httparty'
require_relative '../lib/challenge'
require 'sidekiq'

class CertificateGeneration

  HEROKU_BASE_URL = "https://api.heroku.com".freeze

  attr_reader :app_name, :debug, :subdomains, :domain, :token

  def initialize(domain, subdomains, debug, app_name, token)
    @app_name = app_name
    @debug = debug
    @subdomains = subdomains
    @domain = domain
    @token = token
    @client = acme_client
    set_status(:initialized)
  end

  def provision!
    set_status(:starting)

    Sidekiq.redis do |conn|
      conn.pipelined do
        conn.set("#{redis_key}_app_name", @app_name)
        conn.set("#{redis_key}_domain", @domain)
        conn.set("#{redis_key}_subdomains", @subdomains)
        conn.set("#{redis_key}_debug", @debug)
      end
    end

    set_status(:in_progress)
    registration = @client.register(contact: "mailto:#{ENV['CONTACT_EMAIL']}")
    registration.agree_terms
    cf = CloudFlare::connection(ENV['CLOUDFLARE_API_KEY'], ENV['CLOUDFLARE_EMAIL'])
    domains = [domain]
    domains << subdomains.split(',').map{|d| d << ".#{domain}"}

    domains.flatten.each do |single_domain|
      challenge = Challenge.new(client: @client, domain: single_domain).dns01
      begin
          cf.rec_new(domain, 'TXT', "_acme-challenge.#{single_domain}", challenge.record_content, 1)
      rescue => e
        set_error(e.message)
      else
        set_message('Successfuly added DNS record to CloudFlare')
        set_message('Sleeping for 1 minute while we wait for DNS to propagate.')
        sleep(60)
        challenge.request_verification
        set_message('Sleeping for 2 seconds while LE verifies our ownership.')
        sleep(2)
        if challenge.verify_status == 'valid'
          set_message('YAY! Validation successful. On to certificate generation.')
        else
          set_error('Oh no. Validation was not successful. Try again.')
        end
      end
    end

    csr = Acme::Client::CertificateRequest.new(names: domains.flatten)
    begin
      certificate = @client.new_certificate(csr)
    rescue Acme::Client::Error => e
      set_error(e.message)
    end
    deploy_certificate(certificate)


    set_message('Done')
    set_status(:success)
  end

  private

  def deploy_certificate(certificate)
    set_message('Deploying certificate to Heroku')
    headers = {
      "Accept": 'application/vnd.heroku+json; version=3.sni_ssl_cert',
      "Authorization": "Bearer #{ENV['HEROKU_OAUTH_KEY']}",
      "Content-Type": "application/json"
    }
    query = { enabled: true }.to_json
    HTTParty.patch("#{HEROKU_BASE_URL}/apps/#{@app_name}/features/http-sni", headers: headers, body: query)

    query = {
      "certificate_chain": certificate.fullchain_to_pem,
      "private_key": certificate.request.private_key.to_pem
    }.to_json
    response = HTTParty.post("#{HEROKU_BASE_URL}/apps/#{@app_name}/sni-endpoints", headers: headers, body: query)
    if response.code == 422
      sni_endpoints = HTTParty.get("#{HEROKU_BASE_URL}/apps/#{@app_name}/sni-endpoints", headers: headers)
      HTTParty.patch("#{HEROKU_BASE_URL}/apps/#{@app_name}/sni-endpoints/#{sni_endpoints.parsed_response[0]["id"]}", headers: headers, body: query)
    end
  end

  def redis_key
    @token
  end

  def set_status(status)
    Sidekiq.redis { |conn| conn.set("#{redis_key}_status", status) }
  end

  def set_error(error)
    set_status(:failed)
    Sidekiq.redis { |conn| conn.set("#{redis_key}_error", error) }
  end

  def set_message(message)
    Sidekiq.redis { |conn| conn.set("#{redis_key}_message", message) }
  end

  def acme_client
    Acme::Client.new(private_key: OpenSSL::PKey::RSA.new(4096), endpoint: endpoint)
  end

  def endpoint
    @debug.to_i == 1 ? 'https://acme-staging.api.letsencrypt.org/' : 'https://acme-v01.api.letsencrypt.org/'
  end

end


================================================
FILE: lib/certificate_generator.rb
================================================
require_relative 'logger'

class CertificateGenerator

  attr_reader :csr, :challenge, :certificate

  def initialize(options = {})
    @challenge = options[:challenge]

    Logger.log('Creating challenge records', generator: self)
    @challenge.create_challenge_records
    Logger.log('Sleeping for 120 seconds', generator: self)
    sleep(120) unless ENV['ENVIRONMENT'] == 'test'
    @challenge.verify

    @csr = Acme::Client::CertificateRequest.new(names: @challenge.domains)
    @certificate = @challenge.client.new_certificate(csr)
  end
end


================================================
FILE: lib/challenge.rb
================================================
class Challenge

  attr_reader :client, :authorization, :domain, :dns01

  def initialize(options = {})
    @client = options[:client]
    @domain = options[:domain]
    @authorization = @client.authorize(domain: @domain)
    @dns01 = @authorization.dns01
  end

  def status
    @dns01
  end
end


================================================
FILE: lib/cloudflare_challenge.rb
================================================
require_relative 'challenge'
require 'cloudflare'

class CloudflareChallenge

  attr_reader :zone, :domains, :client, :challenges, :token, :email, :api_key

  def initialize(options = {})
    @email   = options[:email]
    @api_key = options[:api_key]

    @zone    = options[:zone]
    @domains = options[:domains]
    @client  = options[:client]
    @token   = options[:token]
    @challenges = @domains.map do |domain|
      Challenge.new(client: @client, domain: domain)
    end
  end

  def create_challenge_records
    cf = CloudFlare::connection(@api_key, @email)
    @challenges.each do |challenge|
      cf.rec_new(@zone, 'TXT', "_acme-challenge.#{challenge.domain}", challenge.dns01.record_content, 1)
    end
    @domains
  end

  def verify
    @challenges.map do |challenge|
      challenge.dns01.request_verification
    end.uniq[0]
  end

end


================================================
FILE: lib/logger.rb
================================================
class Logger

  def self.log(message, options = {})
    $redis = Redis.new(url: ENV['REDIS_URL'])
    output = ''
    if options[:generator].present?
      output << "[Zone: #{options[:generator].challenge.zone}"
      output << " - Domains: #{options[:generator].challenge.domains.join(", ")}] "
      $redis.set("latest_#{options[:generator].challenge.token}", message)
    end
    output << "----> #{message}"


    puts output unless ENV['ENVIRONMENT'] == 'test'
    return output
  end

end


================================================
FILE: lib/provisioners/heroku.rb
================================================
require 'httparty'
require_relative '../logger'
module Provisioner
  class Heroku

    HEROKU_BASE_URL = "https://api.heroku.com".freeze

    attr_reader :headers, :query

    def initialize(options = {})
      @certificate = options[:certificate]
      @app_name    = options[:app_name]
      @oauth_key   = options[:oauth_key]

      @headers = {
        "Accept": 'application/vnd.heroku+json; version=3.sni_ssl_cert',
        "Authorization": "Bearer #{@oauth_key}",
        "Content-Type": "application/json"
      }

      @query = {
        "certificate_chain": @certificate.fullchain_to_pem,
        "private_key": @certificate.request.private_key.to_pem
      }.to_json
    end

    def provision!
      puts '---> Provisioning Heroku application with new certificate'
      HTTParty.patch("#{HEROKU_BASE_URL}/apps/#{@app_name}/features/http-sni", headers: @headers, body: {enabled: true}.to_json)
      puts "---> Uploading new certificate"
      response = HTTParty.post("#{HEROKU_BASE_URL}/apps/#{@app_name}/sni-endpoints", headers: @headers, body: @query)
      if response.code == 422
        if JSON.parse(response.body)["message"] == "Only one SNI endpoint is allowed per app (try certs:update instead)."
          puts "---> Certificate already exists. Replacing with new one"
          sni_endpoints = HTTParty.get("#{HEROKU_BASE_URL}/apps/#{@app_name}/sni-endpoints", headers: @headers)
          HTTParty.patch("#{HEROKU_BASE_URL}/apps/#{@app_name}/sni-endpoints/#{sni_endpoints.parsed_response[0]["id"]}", headers: @headers, body: @query)
          return true
        else
          Logger.log("Error: #{response.body}")
          return false
        end
      end
      puts "---> Heroku response: #{response.body}"
      return true
    end

  end
end


================================================
FILE: test/acme_client_registration_test.rb
================================================
require_relative 'test_helper'

class AcmeClientRegistrationTest < MiniTest::Test

  def setup
    ENV['CONTACT_EMAIL'] = 'test@example.com'
  end

  def teardown
    $redis.flushdb
  end

  def test_create_an_instance
    VCR.use_cassette('acme-new-reg') do
      a = AcmeClientRegistration.new
      assert_equal AcmeClientRegistration, a.class
    end
  end

  def test_use_the_staging_endpoint
    VCR.use_cassette('acme-new-reg-debug') do
      a = AcmeClientRegistration.new(debug: true)
      assert_equal 'https://acme-staging.api.letsencrypt.org/', a.endpoint
    end
  end

  def test_use_the_live_endpoint
    VCR.use_cassette('acme-new-reg') do
      a = AcmeClientRegistration.new(debug: false)
      assert_equal 'https://acme-v01.api.letsencrypt.org/', a.endpoint
    end
  end

  def test_use_the_live_endpoint_by_default
    VCR.use_cassette('acme-new-reg') do
      a = AcmeClientRegistration.new
      assert_equal 'https://acme-v01.api.letsencrypt.org/', a.endpoint
    end
  end

  def test_assign_an_acme_client_with_live_endpoint
    VCR.use_cassette('acme-new-reg') do
      a = AcmeClientRegistration.new
      assert_equal Acme::Client, a.client.class
      assert_equal 'https://acme-v01.api.letsencrypt.org/', a.client.connection.url_prefix.to_s
    end
  end

  def test_assign_an_acme_client_with_test_endpoint
    VCR.use_cassette('acme-new-reg-debug') do
      a = AcmeClientRegistration.new(debug: true)
      assert_equal Acme::Client, a.client.class
      assert_equal 'https://acme-staging.api.letsencrypt.org/', a.client.connection.url_prefix.to_s
    end
  end

  def test_creating_without_CONTACT_EMAIL_set_should_raise_an_exception
    VCR.use_cassette('acme-new-reg') do
      ENV['CONTACT_EMAIL'] = nil
      assert_raises AcmeClientRegistration::NoEmailError do
        AcmeClientRegistration.new
      end
    end
  end

  def test_client_should_be_registered_and_agreed_to
    VCR.use_cassette('acme-new-reg') do
      a = AcmeClientRegistration.new
      assert_equal true, a.client.nonces.any?
    end
  end

end


================================================
FILE: test/app_test.rb
================================================
require_relative 'test_helper'

class AppTest < MiniTest::Test

  include Rack::Test::Methods

  def app
    Sinatra::Application
  end

  def setup
    ENV['AUTH_TOKEN'] = 'secrettoken'
  end

  def teardown
    $redis.flushdb
  end

  def test_certificate_request_post
    post '/certificate_request', { auth_token: 'secrettoken' }.to_json
    assert last_response.unprocessable?
  end

  def test_certificate_request_with_correct_params
    valid_params = {
      domains: ['substrakt.com', 'www.substrakt.com'],
      heroku_app_name: ['substrakt-live'],
      zone: ['substrakt.com'],
      auth_token: 'secrettoken'
    }
    post '/certificate_request', valid_params.to_json
    assert_equal 'application/json', last_response.content_type
    assert_equal 'queued', JSON.parse(last_response.body)["status"]
    assert_match /\w{32}/, JSON.parse(last_response.body)["uuid"]
    assert last_response.ok?
  end

  def test_certificate_missing_domain_list
    invalid_params = {
      heroku_app_name: ['substrakt-live'],
      auth_token: 'secrettoken'
    }
    post '/certificate_request', invalid_params.to_json
    assert last_response.unprocessable?
  end

  def test_certificate_missing_heroku_app_name
    invalid_params = {
      domains: ['substrakt.com', 'www.substrakt.com'],
      auth_token: 'secrettoken'
    }
    post '/certificate_request', invalid_params.to_json
    assert last_response.unprocessable?
  end

  def test_get_status_of_certificate_request_that_does_not_exist
    params = {
      auth_token: 'secrettoken'
    }
    get '/certificate_request/token1234', params
    assert_equal "token1234 not a valid token", JSON.parse(last_response.body)["status"]
    assert_equal 'application/json', last_response.content_type
    assert last_response.not_found?
  end

  def test_get_status_of_certificate_request_that_does_exist
    $redis.set('status_token1234', 'pending')

    params = {
      auth_token: 'secrettoken'
    }

    get '/certificate_request/token1234', params
    assert_equal 'application/json', last_response.content_type
    assert_equal 200, last_response.status
  end
end


================================================
FILE: test/certificate_generator_test.rb
================================================
require_relative 'test_helper'

class CertificateGeneratorTest < MiniTest::Test

  def setup
    ENV['CONTACT_EMAIL']      = 'max@substrakt.com'
  end

  def teardown
    $redis.flushdb
  end

  def test_generate_certificate
    VCR.use_cassette('new-certificate-debug') do
      a = CertificateGenerator.new(challenge: CloudflareChallenge.new(zone: 'substrakt.com',
                                                                      domains: ['www.substrakt.com', 'substrakt.com'],
                                                                      api_key: 'fsdfdsf',
                                                                      email: 'adam@example.com',
                                                                      client: AcmeClientRegistration.new(debug: true).client))
      assert_equal Acme::Client::Certificate, a.certificate.class
    end
  end

end


================================================
FILE: test/cloudflare_challenge_test.rb
================================================
require_relative 'test_helper'

class CloudflareChallengeTest < MiniTest::Test

  def setup
    ENV['CONTACT_EMAIL'] = 'max@substrakt.com'
  end

  def teardown
    $redis.flushdb
  end

  def test_create_an_instance
    VCR.use_cassette('acme-new-authz') do
      a = CloudflareChallenge.new(zone: 'substrakt.com',
                                  domains: ['www.substrakt.com', 'substrakt.com'],
                                  api_key: 'fsdfdsf',
                                  email: 'adam@example.com',
                                  client: AcmeClientRegistration.new(debug: true).client)
      assert_equal CloudflareChallenge, a.class
    end
  end

  def test_create_an_instance_with_custom_auth
    ENV['CLOUDFLARE_EMAIL']   = nil
    ENV['CLOUDFLARE_API_KEY'] = nil
    VCR.use_cassette('acme-new-authz') do
      a = CloudflareChallenge.new(zone: 'substrakt.com',
                                  domains: ['www.substrakt.com', 'substrakt.com'],
                                  api_key: 'fdhsufgdjshfgsd',
                                  email: 'max@substrakt.com',
                                  client: AcmeClientRegistration.new(debug: true).client)
      assert_equal 'max@substrakt.com', a.email
      assert_equal 'fdhsufgdjshfgsd', a.api_key
    end
  end

  def test_set_zone
    VCR.use_cassette('acme-new-authz') do
      a = CloudflareChallenge.new(zone: 'substrakt.com',
                                  domains: ['www.substrakt.com', 'substrakt.com'],
                                  api_key: 'fsdfdsf',
                                  email: 'adam@example.com',
                                  client: AcmeClientRegistration.new(debug: true).client)
      assert_equal 'substrakt.com', a.zone
    end
  end

  def test_set_domains
    VCR.use_cassette('acme-new-authz') do
      a = CloudflareChallenge.new(zone: 'substrakt.com',
                                  domains: ['www.substrakt.com', 'substrakt.com'],
                                  api_key: 'fsdfdsf',
                                  email: 'adam@example.com',
                                  client: AcmeClientRegistration.new(debug: true).client)
      assert_equal ['www.substrakt.com', 'substrakt.com'], a.domains
    end
  end

  def test_add_challenge_records_to_cloudflare
    VCR.use_cassette('acme-new-authz') do
      a = CloudflareChallenge.new(zone: 'substrakt.com',
                                  domains: ['www.substrakt.com', 'substrakt.com'],
                                  api_key: 'fsdfdsf',
                                  email: 'adam@example.com',
                                  client: AcmeClientRegistration.new(debug: true).client)
      assert_equal ['www.substrakt.com', 'substrakt.com'], a.create_challenge_records
    end
  end

  def test_get_list_of_challenges
    VCR.use_cassette('acme-new-authz') do
      a = CloudflareChallenge.new(zone: 'substrakt.com',
                                  domains: ['www.substrakt.com', 'substrakt.com'],
                                  api_key: 'fsdfdsf',
                                  email: 'adam@example.com',
                                  client: AcmeClientRegistration.new(debug: true).client)
      assert_equal Challenge, a.challenges.first.class
    end
  end

  def test_verification
    VCR.use_cassette('acme-challenge-debug') do
      a = CloudflareChallenge.new(zone: 'substrakt.com',
                                  domains: ['max123.substrakt.com', 'max345.substrakt.com'],
                                  api_key: 'fsdfdsf',
                                  email: 'adam@example.com',
                                  client: AcmeClientRegistration.new(debug: true).client)
      assert_equal true, a.verify
    end
  end

end


================================================
FILE: test/fixtures/vcr_cassettes/acme-challenge-debug.yml
================================================
---
http_interactions:
- request:
    method: head
    uri: https://acme-staging.api.letsencrypt.org/acme/new-reg
    body:
      encoding: US-ASCII
      string: ''
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept:
      - "*/*"
  response:
    status:
      code: 405
      message: Method Not Allowed
    headers:
      Server:
      - nginx
      Content-Type:
      - application/problem+json
      Content-Length:
      - '91'
      Allow:
      - POST
      Boulder-Request-Id:
      - uDeMHlcej0rKzMXQYTUdJMxFoHF9sJiN-sfnqAKqvAM
      Replay-Nonce:
      - d9fsTJHF7ap8hNsgBZStyewA0QUnthx8WgKuwVTaYnY
      Expires:
      - Tue, 15 Nov 2016 15:46:14 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Tue, 15 Nov 2016 15:46:14 GMT
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: ''
    http_version: 
  recorded_at: Tue, 15 Nov 2016 15:46:14 GMT
- request:
    method: post
    uri: https://acme-staging.api.letsencrypt.org/acme/new-reg
    body:
      encoding: UTF-8
      string: '{"protected":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm5vbmNlIjoiZDlmc1RKSEY3YXA4aE5zZ0JaU3R5ZXdBMFFVbnRoeDhXZ0t1d1ZUYVluWSIsImp3ayI6eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsIm4iOiIxRG85anVDbkdUSTVrY1hWRXVFbWJxUWtjSjJMb09hSU5LRGlXZ0JKWGJ3U29aY3kxWERlVnVTRjZHSG5SZ19ncFdJMmVOTFdXYnJVMmxHX3lPbEJsWEZ6QzhaZTk5YXRVRVNVZ1dxZXNtQ1BRSUJhV0tsRDJhQWNzbmdHZDg0WTNpR0UxZUJhYlRLV3BuZ05Ba2w0VWlfa2xOQjRvTkk0U2JBVzIwMGFVYTRKVDZjUjNfcThlX0ViR2lFb2JBVXhGZEJtX0I0TTBwZ0RJWmd5RFdnYWhhNmdFbC11eGdMZkJ3OTI2dlA4aVBqZnlWZFplbVVBRjdxSzMzZUl4d1dNeEJJTl9tYzNpOS1kQXZnZ2NETXdoRzBaZmxZQkx2QlZGWS03Vk5qY1Y3OC00Vmo5NXF0R0JCOTlmNnc1Uklod0FXdFJiMURqMW56bG1iZmRCNDJhcktoT1JnTnlXSzE2YVBTb3RoS1BwV01TT09Vc19Bbm5wTVE4cFdpX1dabl9SSU1xbjZHcERuNVNpbEJrMnE5WjVicGVSTnNNc1JBRjhHTDR3UkFGZG5BRThTNWE3ck5DVk13bERKTUNiWk9PU1ZPa1ZJNlJ5dnVyNUoyajNtREh6a3FRdzVaaGNPeUhwQUVrVkc5NWFQQjVhenZHaWRZc1c3LU5sTlZ5d2c4NTdiRzNydDBRUlUwWENwUmRGYUZsUHp4cGN2djJWTzN2R2RzTjc3R3RSbUhyY3FiVWt0VHNDTl9qZDk5UU1JT1VLUkJWUGFnZHk3bFNGbk1Cc1c1eFBPMGZYdnpxd0t2YTcxN1dSV1lZUEJ4YkFDMDNnQnBoLWVsTmMwMnRqZjEwYXhSWlE3NUY0UDRiSTI0QkM3NHd3RndBdWZqUXdpNzd4dlZpcFh3cmdvOCJ9fQ","payload":"eyJyZXNvdXJjZSI6Im5ldy1yZWciLCJjb250YWN0IjpbIm1haWx0bzptYXhAc3Vic3RyYWt0LmNvbSJdfQ","signature":"UpFFW8k4On2u5BZx_5aPmIOxFds-CNU8Iz9UPs12KYIVzsLzOxg2CwcnIGelfL3dMZQdqKU4Ab49yRUQlA_9YXUPTsscrpv1lfZ5hvlt-N29z4Ort5bcaamNaeQq2Szx1Bp1TacCEfAmwpzT6_dEFDu5g9WvGHgrv3okxKezQyEgOt1w0JAIpg0R7Oj1RwzgFNsGzXv3Yj0Zq4zcX97VkDLway69UuRBXbfrvA7fKnRCQVHuA9wpRbT6SkJkdxQE5j1iTxFG4zsj7q7BbsHdT-C_F-qI8LDREi9388z2xFxNPcupkpwFFzeoXtSBNFRCf8QfcRWSbFoBkB9sasP0cvorY_3X0ezjOML7uMK_6daK0iBvT5ge5cMvxJXBqjyumniy5JG0kytuzPMiZ3FPgZtYj75HXajN0nNPc-g--ZE6vgtMIJG0oXrIMFnh2w8KBfH5qBosoGW9A_FUbAZZTgNi1Hredyofm6T-lvqUpMvcmRq_x5KeQ0e8vWdpUvE4RaDYMUOzDuX5t1hJHTr-P4zx1NqhCp7tKddr4ENzkG5M7AZDYg0lpOJzQL5y9fKwEHWeGCGgFNGu3-uvaSH8vUhjv8SGKHpmjSmOOX57NIyRnEgjYE_49m7-LFwBPRqAljFQ4wCR4-eegYxTMYd6a7466jKrr48aZNu5z5VnB3w"}'
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
  response:
    status:
      code: 201
      message: Created
    headers:
      Server:
      - nginx
      Content-Type:
      - application/json
      Content-Length:
      - '914'
      Boulder-Request-Id:
      - 2Dvu0dNB8USfic3eY_grHHS8JumADwjVHTRaAdnSJ9s
      Boulder-Requester:
      - '496458'
      Link:
      - <https://acme-staging.api.letsencrypt.org/acme/new-authz>;rel="next"
      - <https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf>;rel="terms-of-service"
      Location:
      - https://acme-staging.api.letsencrypt.org/acme/reg/496458
      Replay-Nonce:
      - sa7THSiunLZYzSxbNBEWrsfsvoEVQ7BdT2tpMs5TxJk
      X-Frame-Options:
      - DENY
      Strict-Transport-Security:
      - max-age=604800
      Expires:
      - Tue, 15 Nov 2016 15:46:15 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Tue, 15 Nov 2016 15:46:15 GMT
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: |-
        {
          "id": 496458,
          "key": {
            "kty": "RSA",
            "n": "1Do9juCnGTI5kcXVEuEmbqQkcJ2LoOaINKDiWgBJXbwSoZcy1XDeVuSF6GHnRg_gpWI2eNLWWbrU2lG_yOlBlXFzC8Ze99atUESUgWqesmCPQIBaWKlD2aAcsngGd84Y3iGE1eBabTKWpngNAkl4Ui_klNB4oNI4SbAW200aUa4JT6cR3_q8e_EbGiEobAUxFdBm_B4M0pgDIZgyDWgaha6gEl-uxgLfBw926vP8iPjfyVdZemUAF7qK33eIxwWMxBIN_mc3i9-dAvggcDMwhG0ZflYBLvBVFY-7VNjcV78-4Vj95qtGBB99f6w5RIhwAWtRb1Dj1nzlmbfdB42arKhORgNyWK16aPSothKPpWMSOOUs_AnnpMQ8pWi_WZn_RIMqn6GpDn5SilBk2q9Z5bpeRNsMsRAF8GL4wRAFdnAE8S5a7rNCVMwlDJMCbZOOSVOkVI6Ryvur5J2j3mDHzkqQw5ZhcOyHpAEkVG95aPB5azvGidYsW7-NlNVywg857bG3rt0QRU0XCpRdFaFlPzxpcvv2VO3vGdsN77GtRmHrcqbUktTsCN_jd99QMIOUKRBVPagdy7lSFnMBsW5xPO0fXvzqwKva717WRWYYPBxbAC03gBph-elNc02tjf10axRZQ75F4P4bI24BC74wwFwAufjQwi77xvVipXwrgo8",
            "e": "AQAB"
          },
          "contact": [
            "mailto:max@substrakt.com"
          ],
          "initialIp": "213.123.191.198",
          "createdAt": "2016-11-15T15:46:15.301210461Z",
          "Status": ""
        }
    http_version: 
  recorded_at: Tue, 15 Nov 2016 15:46:15 GMT
- request:
    method: post
    uri: https://acme-staging.api.letsencrypt.org/acme/reg/496458
    body:
      encoding: UTF-8
      string: '{"protected":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm5vbmNlIjoic2E3VEhTaXVuTFpZelN4Yk5CRVdyc2Zzdm9FVlE3QmRUMnRwTXM1VHhKayIsImp3ayI6eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsIm4iOiIxRG85anVDbkdUSTVrY1hWRXVFbWJxUWtjSjJMb09hSU5LRGlXZ0JKWGJ3U29aY3kxWERlVnVTRjZHSG5SZ19ncFdJMmVOTFdXYnJVMmxHX3lPbEJsWEZ6QzhaZTk5YXRVRVNVZ1dxZXNtQ1BRSUJhV0tsRDJhQWNzbmdHZDg0WTNpR0UxZUJhYlRLV3BuZ05Ba2w0VWlfa2xOQjRvTkk0U2JBVzIwMGFVYTRKVDZjUjNfcThlX0ViR2lFb2JBVXhGZEJtX0I0TTBwZ0RJWmd5RFdnYWhhNmdFbC11eGdMZkJ3OTI2dlA4aVBqZnlWZFplbVVBRjdxSzMzZUl4d1dNeEJJTl9tYzNpOS1kQXZnZ2NETXdoRzBaZmxZQkx2QlZGWS03Vk5qY1Y3OC00Vmo5NXF0R0JCOTlmNnc1Uklod0FXdFJiMURqMW56bG1iZmRCNDJhcktoT1JnTnlXSzE2YVBTb3RoS1BwV01TT09Vc19Bbm5wTVE4cFdpX1dabl9SSU1xbjZHcERuNVNpbEJrMnE5WjVicGVSTnNNc1JBRjhHTDR3UkFGZG5BRThTNWE3ck5DVk13bERKTUNiWk9PU1ZPa1ZJNlJ5dnVyNUoyajNtREh6a3FRdzVaaGNPeUhwQUVrVkc5NWFQQjVhenZHaWRZc1c3LU5sTlZ5d2c4NTdiRzNydDBRUlUwWENwUmRGYUZsUHp4cGN2djJWTzN2R2RzTjc3R3RSbUhyY3FiVWt0VHNDTl9qZDk5UU1JT1VLUkJWUGFnZHk3bFNGbk1Cc1c1eFBPMGZYdnpxd0t2YTcxN1dSV1lZUEJ4YkFDMDNnQnBoLWVsTmMwMnRqZjEwYXhSWlE3NUY0UDRiSTI0QkM3NHd3RndBdWZqUXdpNzd4dlZpcFh3cmdvOCJ9fQ","payload":"eyJyZXNvdXJjZSI6InJlZyIsImFncmVlbWVudCI6Imh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL2RvY3VtZW50cy9MRS1TQS12MS4xLjEtQXVndXN0LTEtMjAxNi5wZGYifQ","signature":"AvhEYkxjVEOQjJ-mntlyW0LwYbqP6u4vgZ3QdyxUMClS9tTGA4RHPOh9Y5ZzMoLEVnf5U-K_Cd5mXWrx_gUcL5RPkMEbbCNu3HEADrCVDD2G37lrp1qrUMTZa_hhV7ID4wHQGTBBYItLzwrHSVW4dU-Q93so_J7rs67jbvTfNfXdwb41q8z4zhONisvuNTmCjArKJFKgkhtwHtWxDA4ppy5xMrnfIBeCzPeHMqmpHHGeu7WxgJT_DsxIq6NluZ25GAEGaQSbr5khMj9v1qmxiiMRbDXrE94iiU9m2puquLRpqK9bmGdGHP9EJhyq84hA4lQMhOkBcm1I4NX4j50o08CKI1Ed-8hkP_wSeArbsLmdInhwp1a8aJkqaoNgXE2iF6EY7dOheTvmNNNEb-tQoCJyJQeLrF4t0B8aYwCfJbFhwzAe4N6LBktX8Z4lJsrAEgqrYRvmw2wiBGLlZCVHtkweXOCAONrBSGW1K0Wd57NKpvnHCnoFFQOA96DaW_m-7QhCC_VBhvHZ5e1nBAPsWgX1RAgE3rm7DATgBlOKz3iuJAxiWAS-IRqfJkhFxzfnm5Dh7I-x5Ycx_G8ChfUtpTRG3kIll8fzBKCVzMgx7p1-M8djfDqwqju0YmnT9CkwxtxKD6AmQQgZSaa42c6ht_Zs-98ZJaYbdlHGvMo0rzQ"}'
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
  response:
    status:
      code: 202
      message: Accepted
    headers:
      Server:
      - nginx
      Content-Type:
      - application/json
      Content-Length:
      - '987'
      Boulder-Request-Id:
      - qnKTD1bn6wPUM-zQjTE4QnoZpbg2tCcvYH6v2DfnSKQ
      Boulder-Requester:
      - '496458'
      Link:
      - <https://acme-staging.api.letsencrypt.org/acme/new-authz>;rel="next"
      - <https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf>;rel="terms-of-service"
      Replay-Nonce:
      - Ddhii7MdLe0vMbUaDhoFV5srVOks5updsJ5GRZDurks
      Expires:
      - Tue, 15 Nov 2016 15:46:15 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Tue, 15 Nov 2016 15:46:15 GMT
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: |-
        {
          "id": 496458,
          "key": {
            "kty": "RSA",
            "n": "1Do9juCnGTI5kcXVEuEmbqQkcJ2LoOaINKDiWgBJXbwSoZcy1XDeVuSF6GHnRg_gpWI2eNLWWbrU2lG_yOlBlXFzC8Ze99atUESUgWqesmCPQIBaWKlD2aAcsngGd84Y3iGE1eBabTKWpngNAkl4Ui_klNB4oNI4SbAW200aUa4JT6cR3_q8e_EbGiEobAUxFdBm_B4M0pgDIZgyDWgaha6gEl-uxgLfBw926vP8iPjfyVdZemUAF7qK33eIxwWMxBIN_mc3i9-dAvggcDMwhG0ZflYBLvBVFY-7VNjcV78-4Vj95qtGBB99f6w5RIhwAWtRb1Dj1nzlmbfdB42arKhORgNyWK16aPSothKPpWMSOOUs_AnnpMQ8pWi_WZn_RIMqn6GpDn5SilBk2q9Z5bpeRNsMsRAF8GL4wRAFdnAE8S5a7rNCVMwlDJMCbZOOSVOkVI6Ryvur5J2j3mDHzkqQw5ZhcOyHpAEkVG95aPB5azvGidYsW7-NlNVywg857bG3rt0QRU0XCpRdFaFlPzxpcvv2VO3vGdsN77GtRmHrcqbUktTsCN_jd99QMIOUKRBVPagdy7lSFnMBsW5xPO0fXvzqwKva717WRWYYPBxbAC03gBph-elNc02tjf10axRZQ75F4P4bI24BC74wwFwAufjQwi77xvVipXwrgo8",
            "e": "AQAB"
          },
          "contact": [
            "mailto:max@substrakt.com"
          ],
          "agreement": "https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf",
          "initialIp": "213.123.191.198",
          "createdAt": "2016-11-15T15:46:15Z",
          "Status": ""
        }
    http_version: 
  recorded_at: Tue, 15 Nov 2016 15:46:15 GMT
- request:
    method: post
    uri: https://acme-staging.api.letsencrypt.org/acme/new-authz
    body:
      encoding: UTF-8
      string: '{"protected":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm5vbmNlIjoiRGRoaWk3TWRMZTB2TWJVYURob0ZWNXNyVk9rczV1cGRzSjVHUlpEdXJrcyIsImp3ayI6eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsIm4iOiIxRG85anVDbkdUSTVrY1hWRXVFbWJxUWtjSjJMb09hSU5LRGlXZ0JKWGJ3U29aY3kxWERlVnVTRjZHSG5SZ19ncFdJMmVOTFdXYnJVMmxHX3lPbEJsWEZ6QzhaZTk5YXRVRVNVZ1dxZXNtQ1BRSUJhV0tsRDJhQWNzbmdHZDg0WTNpR0UxZUJhYlRLV3BuZ05Ba2w0VWlfa2xOQjRvTkk0U2JBVzIwMGFVYTRKVDZjUjNfcThlX0ViR2lFb2JBVXhGZEJtX0I0TTBwZ0RJWmd5RFdnYWhhNmdFbC11eGdMZkJ3OTI2dlA4aVBqZnlWZFplbVVBRjdxSzMzZUl4d1dNeEJJTl9tYzNpOS1kQXZnZ2NETXdoRzBaZmxZQkx2QlZGWS03Vk5qY1Y3OC00Vmo5NXF0R0JCOTlmNnc1Uklod0FXdFJiMURqMW56bG1iZmRCNDJhcktoT1JnTnlXSzE2YVBTb3RoS1BwV01TT09Vc19Bbm5wTVE4cFdpX1dabl9SSU1xbjZHcERuNVNpbEJrMnE5WjVicGVSTnNNc1JBRjhHTDR3UkFGZG5BRThTNWE3ck5DVk13bERKTUNiWk9PU1ZPa1ZJNlJ5dnVyNUoyajNtREh6a3FRdzVaaGNPeUhwQUVrVkc5NWFQQjVhenZHaWRZc1c3LU5sTlZ5d2c4NTdiRzNydDBRUlUwWENwUmRGYUZsUHp4cGN2djJWTzN2R2RzTjc3R3RSbUhyY3FiVWt0VHNDTl9qZDk5UU1JT1VLUkJWUGFnZHk3bFNGbk1Cc1c1eFBPMGZYdnpxd0t2YTcxN1dSV1lZUEJ4YkFDMDNnQnBoLWVsTmMwMnRqZjEwYXhSWlE3NUY0UDRiSTI0QkM3NHd3RndBdWZqUXdpNzd4dlZpcFh3cmdvOCJ9fQ","payload":"eyJyZXNvdXJjZSI6Im5ldy1hdXRoeiIsImlkZW50aWZpZXIiOnsidHlwZSI6ImRucyIsInZhbHVlIjoibWF4MTIzLnN1YnN0cmFrdC5jb20ifX0","signature":"KmjCHZlVilMRHCzXvGiR6iNNeB1jdAZXOQ4dmfZ7SzZb7uYJ-BpDZsmiyi9JTBMfwUiDP_nzs2T_mDu6asju3tB4QfAFa0tJ6Zf0tMrekbHZ9affXPkjhHinwJzLQO_xDpaLYVhBQaiDRvViZXxsTms_aoLC0Yna7z1cfTzTJVS3BAkJthScZVvERiG7lu7-9KXGlECGZ_eAbNEw5w3_LMlcp8GekrkauE_CsD6pk89UpBZsifEx3s43Kc_2JTzlvu8q7I49qb-yzPPCeIQzfsZgejYo7WAjaiKxdNEDkYmRFqQ0eIkxAUS4jL12HUCZPUg9zGKyEiCgM1XryzzxQUGjpaPe3x5wZvzCjZAWLFRnurAg5Lb0Kt7vVbFAm9u_JnuUZIhy_McuuEygaznlD4TwrB9Uj4bMAt5ojunJ1Za4FoBiWv0lBBCET_tXvcqpihhBJDmtcu3vIHGPw1A8JMNtWq866_ZcyAPOGDvdZ8nqfWYlXj-dWWn9nnh6FuU4A2nX2Ah8VSjPLn5yb5t8r09QqUP1McIvEPjbXRVBDd-RWpUF5WxHk_Hdv92QghBC0oiubl6OIKsdMI-LR6Cg2Lz6zZ5FNKtTi3mOAiabkrCIa_WaHPvOGJjY5TxJ5ZapiPFumOPEFn6RvH_DIoAyZt4nvp2Dih8qyfCgnW9uDS4"}'
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
  response:
    status:
      code: 201
      message: Created
    headers:
      Server:
      - nginx
      Content-Type:
      - application/json
      Content-Length:
      - '1014'
      Boulder-Request-Id:
      - I3QcSfw6e0xnSzDJlth0unfyyFy_ToHko1ItfHnt7tk
      Boulder-Requester:
      - '496458'
      Link:
      - <https://acme-staging.api.letsencrypt.org/acme/new-cert>;rel="next"
      Location:
      - https://acme-staging.api.letsencrypt.org/acme/authz/ctY8Ec4RD9-PXKZ3GGHUzE0KZa3ZK1qMttqrcrvC8eA
      Replay-Nonce:
      - lKBMz3-TXfdoUpm2Httav2KfyP0wBPqKx7i3Mh5qsgg
      X-Frame-Options:
      - DENY
      Strict-Transport-Security:
      - max-age=604800
      Expires:
      - Tue, 15 Nov 2016 15:46:16 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Tue, 15 Nov 2016 15:46:16 GMT
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: |-
        {
          "identifier": {
            "type": "dns",
            "value": "max123.substrakt.com"
          },
          "status": "pending",
          "expires": "2016-11-22T15:46:16.199698302Z",
          "challenges": [
            {
              "type": "tls-sni-01",
              "status": "pending",
              "uri": "https://acme-staging.api.letsencrypt.org/acme/challenge/ctY8Ec4RD9-PXKZ3GGHUzE0KZa3ZK1qMttqrcrvC8eA/16907312",
              "token": "EnEXB2bmoTixJVBYDIXE-tRXtts-8O_3xEv4WScDYjw"
            },
            {
              "type": "dns-01",
              "status": "pending",
              "uri": "https://acme-staging.api.letsencrypt.org/acme/challenge/ctY8Ec4RD9-PXKZ3GGHUzE0KZa3ZK1qMttqrcrvC8eA/16907313",
              "token": "zQBMXxIfbK4yB7x8SGjwY1cQBN3LbrwehmJe3p0vCiM"
            },
            {
              "type": "http-01",
              "status": "pending",
              "uri": "https://acme-staging.api.letsencrypt.org/acme/challenge/ctY8Ec4RD9-PXKZ3GGHUzE0KZa3ZK1qMttqrcrvC8eA/16907314",
              "token": "3Rts0qQ7_aTdD5JI0oEIemllfKZhZytQn7bOUmNuVZM"
            }
          ],
          "combinations": [
            [
              0
            ],
            [
              1
            ],
            [
              2
            ]
          ]
        }
    http_version: 
  recorded_at: Tue, 15 Nov 2016 15:46:16 GMT
- request:
    method: post
    uri: https://acme-staging.api.letsencrypt.org/acme/new-authz
    body:
      encoding: UTF-8
      string: '{"protected":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm5vbmNlIjoibEtCTXozLVRYZmRvVXBtMkh0dGF2MktmeVAwd0JQcUt4N2kzTWg1cXNnZyIsImp3ayI6eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsIm4iOiIxRG85anVDbkdUSTVrY1hWRXVFbWJxUWtjSjJMb09hSU5LRGlXZ0JKWGJ3U29aY3kxWERlVnVTRjZHSG5SZ19ncFdJMmVOTFdXYnJVMmxHX3lPbEJsWEZ6QzhaZTk5YXRVRVNVZ1dxZXNtQ1BRSUJhV0tsRDJhQWNzbmdHZDg0WTNpR0UxZUJhYlRLV3BuZ05Ba2w0VWlfa2xOQjRvTkk0U2JBVzIwMGFVYTRKVDZjUjNfcThlX0ViR2lFb2JBVXhGZEJtX0I0TTBwZ0RJWmd5RFdnYWhhNmdFbC11eGdMZkJ3OTI2dlA4aVBqZnlWZFplbVVBRjdxSzMzZUl4d1dNeEJJTl9tYzNpOS1kQXZnZ2NETXdoRzBaZmxZQkx2QlZGWS03Vk5qY1Y3OC00Vmo5NXF0R0JCOTlmNnc1Uklod0FXdFJiMURqMW56bG1iZmRCNDJhcktoT1JnTnlXSzE2YVBTb3RoS1BwV01TT09Vc19Bbm5wTVE4cFdpX1dabl9SSU1xbjZHcERuNVNpbEJrMnE5WjVicGVSTnNNc1JBRjhHTDR3UkFGZG5BRThTNWE3ck5DVk13bERKTUNiWk9PU1ZPa1ZJNlJ5dnVyNUoyajNtREh6a3FRdzVaaGNPeUhwQUVrVkc5NWFQQjVhenZHaWRZc1c3LU5sTlZ5d2c4NTdiRzNydDBRUlUwWENwUmRGYUZsUHp4cGN2djJWTzN2R2RzTjc3R3RSbUhyY3FiVWt0VHNDTl9qZDk5UU1JT1VLUkJWUGFnZHk3bFNGbk1Cc1c1eFBPMGZYdnpxd0t2YTcxN1dSV1lZUEJ4YkFDMDNnQnBoLWVsTmMwMnRqZjEwYXhSWlE3NUY0UDRiSTI0QkM3NHd3RndBdWZqUXdpNzd4dlZpcFh3cmdvOCJ9fQ","payload":"eyJyZXNvdXJjZSI6Im5ldy1hdXRoeiIsImlkZW50aWZpZXIiOnsidHlwZSI6ImRucyIsInZhbHVlIjoibWF4MzQ1LnN1YnN0cmFrdC5jb20ifX0","signature":"NzTJhYTskm6GY2YxngrPKpgqrserGrxlnNBh6NeZXPgTqEou_8jGrTGu2zkrNPuW-_ZVHqeEcZFi4eo733F3zgH3QSexn6OCgkxLvTlXFdZaQCUBC5tjUzaMTJkJubOKdW7L_wGVKzrC48K2DfpMvhMr6bwoJMnFdr-sqVmzXzMmMPLfI3S_LwShfpwQsCuTL5OnvW2QVFinldPZ9vuCpaUycLUKiCmBoR7SB901Zqk8WfnPuc1kjG6BFO_tz0_yXwc04p295poQkKO7zmQ5LKlnhHVLc6jVzf1fRpn3ivB-DF0QXX_h4-uUfkbvO-C8d5eSE_vIGPOj3TdpuxgP9ree_16KCBZT2jObkypyd2c14v04QnaMgVSsB4Y3CtKOaXJJKP6SPvvGkvVogBi7jPr4cUMETpYnKpB9cc9mpxh_o-DYwsYk5iN0qfJ3g68iugJqEu0ylZIMyJm-o_6RtpfcI8X23mvNNvPLrOqjRVnpBqmekzUSQhTJtvgSOMlEDceZFOWlrnpYUsLCQPVrsCxH0-VdrTy8Jy0YgzgmCm_NkJytMSvnwJJEm7vEcFMMAFzs7q0Zv4ZWxtGAw7l9v2FzxFmQk34z4hEixigUBBpUIMr8uRnRxQX01RhRORFQO32ehONgaRkKI3Z4tQNpFE3vrBVVbovsVH06s7IdHIg"}'
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
  response:
    status:
      code: 201
      message: Created
    headers:
      Server:
      - nginx
      Content-Type:
      - application/json
      Content-Length:
      - '1014'
      Boulder-Request-Id:
      - VEU2JJJdMp7ozI4vcb4CwaYfIX2orQZBILuseY1VpbU
      Boulder-Requester:
      - '496458'
      Link:
      - <https://acme-staging.api.letsencrypt.org/acme/new-cert>;rel="next"
      Location:
      - https://acme-staging.api.letsencrypt.org/acme/authz/73OZWvTewlUC30b61mXrF2xJCEfzRPseCeoDRVlziTs
      Replay-Nonce:
      - ESdacN7K7N4cGsxt93hXld8gmfR3bVdMgtF3OAJTSo8
      X-Frame-Options:
      - DENY
      Strict-Transport-Security:
      - max-age=604800
      Expires:
      - Tue, 15 Nov 2016 15:46:16 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Tue, 15 Nov 2016 15:46:16 GMT
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: |-
        {
          "identifier": {
            "type": "dns",
            "value": "max345.substrakt.com"
          },
          "status": "pending",
          "expires": "2016-11-22T15:46:16.687589597Z",
          "challenges": [
            {
              "type": "http-01",
              "status": "pending",
              "uri": "https://acme-staging.api.letsencrypt.org/acme/challenge/73OZWvTewlUC30b61mXrF2xJCEfzRPseCeoDRVlziTs/16907315",
              "token": "txt7p7ltlryvInmMgKcFDMwsZzw2D3WFIShKc3CTh6o"
            },
            {
              "type": "dns-01",
              "status": "pending",
              "uri": "https://acme-staging.api.letsencrypt.org/acme/challenge/73OZWvTewlUC30b61mXrF2xJCEfzRPseCeoDRVlziTs/16907316",
              "token": "YT1tK76nDb-r8rQ3meOKGUC23bvzePeWE4x5-agSdY8"
            },
            {
              "type": "tls-sni-01",
              "status": "pending",
              "uri": "https://acme-staging.api.letsencrypt.org/acme/challenge/73OZWvTewlUC30b61mXrF2xJCEfzRPseCeoDRVlziTs/16907317",
              "token": "7RLAuVQtFy_xzbumHA1_Zo4objeOcLfVyHZezkN0Stw"
            }
          ],
          "combinations": [
            [
              1
            ],
            [
              2
            ],
            [
              0
            ]
          ]
        }
    http_version: 
  recorded_at: Tue, 15 Nov 2016 15:46:16 GMT
- request:
    method: post
    uri: https://acme-staging.api.letsencrypt.org/acme/challenge/ctY8Ec4RD9-PXKZ3GGHUzE0KZa3ZK1qMttqrcrvC8eA/16907313
    body:
      encoding: UTF-8
      string: '{"protected":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm5vbmNlIjoiRVNkYWNON0s3TjRjR3N4dDkzaFhsZDhnbWZSM2JWZE1ndEYzT0FKVFNvOCIsImp3ayI6eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsIm4iOiIxRG85anVDbkdUSTVrY1hWRXVFbWJxUWtjSjJMb09hSU5LRGlXZ0JKWGJ3U29aY3kxWERlVnVTRjZHSG5SZ19ncFdJMmVOTFdXYnJVMmxHX3lPbEJsWEZ6QzhaZTk5YXRVRVNVZ1dxZXNtQ1BRSUJhV0tsRDJhQWNzbmdHZDg0WTNpR0UxZUJhYlRLV3BuZ05Ba2w0VWlfa2xOQjRvTkk0U2JBVzIwMGFVYTRKVDZjUjNfcThlX0ViR2lFb2JBVXhGZEJtX0I0TTBwZ0RJWmd5RFdnYWhhNmdFbC11eGdMZkJ3OTI2dlA4aVBqZnlWZFplbVVBRjdxSzMzZUl4d1dNeEJJTl9tYzNpOS1kQXZnZ2NETXdoRzBaZmxZQkx2QlZGWS03Vk5qY1Y3OC00Vmo5NXF0R0JCOTlmNnc1Uklod0FXdFJiMURqMW56bG1iZmRCNDJhcktoT1JnTnlXSzE2YVBTb3RoS1BwV01TT09Vc19Bbm5wTVE4cFdpX1dabl9SSU1xbjZHcERuNVNpbEJrMnE5WjVicGVSTnNNc1JBRjhHTDR3UkFGZG5BRThTNWE3ck5DVk13bERKTUNiWk9PU1ZPa1ZJNlJ5dnVyNUoyajNtREh6a3FRdzVaaGNPeUhwQUVrVkc5NWFQQjVhenZHaWRZc1c3LU5sTlZ5d2c4NTdiRzNydDBRUlUwWENwUmRGYUZsUHp4cGN2djJWTzN2R2RzTjc3R3RSbUhyY3FiVWt0VHNDTl9qZDk5UU1JT1VLUkJWUGFnZHk3bFNGbk1Cc1c1eFBPMGZYdnpxd0t2YTcxN1dSV1lZUEJ4YkFDMDNnQnBoLWVsTmMwMnRqZjEwYXhSWlE3NUY0UDRiSTI0QkM3NHd3RndBdWZqUXdpNzd4dlZpcFh3cmdvOCJ9fQ","payload":"eyJyZXNvdXJjZSI6ImNoYWxsZW5nZSIsInR5cGUiOiJkbnMtMDEiLCJrZXlBdXRob3JpemF0aW9uIjoielFCTVh4SWZiSzR5Qjd4OFNHandZMWNRQk4zTGJyd2VobUplM3AwdkNpTS5OX2hyNWE0NFJMa05RTnYwVmpWZjg4N2JMTXdIdV80ZGxtbFJHUzZGcTE0In0","signature":"j58pSMGPWvOW_B58YRYc6-mnlNSs_Fuk4mN-BvNdgzWJpRTj-edy4kIY3DUgXGvv8QqwMgYpupQ-UinGlmZltUOWeWo97h2UyysrdrK8hosFQXbvn53olDAZgeNzmX4Yfapg8sl7F-k87-BFC9lmx6up3ae3yTnQtIsbgzma5rR-XMCdRc3JhB_MRVYC7ARqo05E-C8G6Y2Keh3wMWQXC27jz3-J5KJcqLGV3zHerAU1rVIVYQ7-RZY8VV8-IFbOVDn1iDUQIUqL6VusZt6vKGbYa8FNrtFyYTxSmNEIu6kN0lciEaK1s7Dk2_ewRvpgx6ZIzPc7espc8jVk_37eaPABozCXm_xYH_V3qOM3x3hUQLX-gBW-1WHVTjWdTIlozPU_PXMH0KDistScvh40i1snQOVR68SOK0lnlkUrsx6KRpdfhBesBIIEFLIqf1x_OicxZJCmwCANEaYfoUgeAlVcOECBiLwLQ4-mDVf5tll3AQgsgyay7AcN0hEIK-FilJV8EjWGhcu9EvqQmmL6WDcZFR-Xhkkk7hX2IsHBBIV4r0ndmwCjXvwyD_mbcccGTpodreFOZaQo6Jh0TBKNb7Csp1lZ3oE5Qgntfn6tQ0NO8AzwSwzzGkwrQ0vJd9hVw6JXhYUua5WvDGmy-_v0Rw5if3Sh8qfOYGTiUHTvhfk"}'
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
  response:
    status:
      code: 202
      message: Accepted
    headers:
      Server:
      - nginx
      Content-Type:
      - application/json
      Content-Length:
      - '337'
      Boulder-Request-Id:
      - QjyAxDtEOsuYLCxuzOQ7vH-aNhHy4KFlPJPlAurITvg
      Boulder-Requester:
      - '496458'
      Link:
      - <https://acme-staging.api.letsencrypt.org/acme/authz/ctY8Ec4RD9-PXKZ3GGHUzE0KZa3ZK1qMttqrcrvC8eA>;rel="up"
      Location:
      - https://acme-staging.api.letsencrypt.org/acme/challenge/ctY8Ec4RD9-PXKZ3GGHUzE0KZa3ZK1qMttqrcrvC8eA/16907313
      Replay-Nonce:
      - RtdEWhFlBtAHmgmOoIDjqHL1C3wOdAC4Kg2Z1NtB80E
      Expires:
      - Tue, 15 Nov 2016 15:47:17 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Tue, 15 Nov 2016 15:47:17 GMT
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: |-
        {
          "type": "dns-01",
          "status": "pending",
          "uri": "https://acme-staging.api.letsencrypt.org/acme/challenge/ctY8Ec4RD9-PXKZ3GGHUzE0KZa3ZK1qMttqrcrvC8eA/16907313",
          "token": "zQBMXxIfbK4yB7x8SGjwY1cQBN3LbrwehmJe3p0vCiM",
          "keyAuthorization": "zQBMXxIfbK4yB7x8SGjwY1cQBN3LbrwehmJe3p0vCiM.N_hr5a44RLkNQNv0VjVf887bLMwHu_4dlmlRGS6Fq14"
        }
    http_version: 
  recorded_at: Tue, 15 Nov 2016 15:47:17 GMT
- request:
    method: post
    uri: https://acme-staging.api.letsencrypt.org/acme/challenge/73OZWvTewlUC30b61mXrF2xJCEfzRPseCeoDRVlziTs/16907316
    body:
      encoding: UTF-8
      string: '{"protected":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm5vbmNlIjoiUnRkRVdoRmxCdEFIbWdtT29JRGpxSEwxQzN3T2RBQzRLZzJaMU50QjgwRSIsImp3ayI6eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsIm4iOiIxRG85anVDbkdUSTVrY1hWRXVFbWJxUWtjSjJMb09hSU5LRGlXZ0JKWGJ3U29aY3kxWERlVnVTRjZHSG5SZ19ncFdJMmVOTFdXYnJVMmxHX3lPbEJsWEZ6QzhaZTk5YXRVRVNVZ1dxZXNtQ1BRSUJhV0tsRDJhQWNzbmdHZDg0WTNpR0UxZUJhYlRLV3BuZ05Ba2w0VWlfa2xOQjRvTkk0U2JBVzIwMGFVYTRKVDZjUjNfcThlX0ViR2lFb2JBVXhGZEJtX0I0TTBwZ0RJWmd5RFdnYWhhNmdFbC11eGdMZkJ3OTI2dlA4aVBqZnlWZFplbVVBRjdxSzMzZUl4d1dNeEJJTl9tYzNpOS1kQXZnZ2NETXdoRzBaZmxZQkx2QlZGWS03Vk5qY1Y3OC00Vmo5NXF0R0JCOTlmNnc1Uklod0FXdFJiMURqMW56bG1iZmRCNDJhcktoT1JnTnlXSzE2YVBTb3RoS1BwV01TT09Vc19Bbm5wTVE4cFdpX1dabl9SSU1xbjZHcERuNVNpbEJrMnE5WjVicGVSTnNNc1JBRjhHTDR3UkFGZG5BRThTNWE3ck5DVk13bERKTUNiWk9PU1ZPa1ZJNlJ5dnVyNUoyajNtREh6a3FRdzVaaGNPeUhwQUVrVkc5NWFQQjVhenZHaWRZc1c3LU5sTlZ5d2c4NTdiRzNydDBRUlUwWENwUmRGYUZsUHp4cGN2djJWTzN2R2RzTjc3R3RSbUhyY3FiVWt0VHNDTl9qZDk5UU1JT1VLUkJWUGFnZHk3bFNGbk1Cc1c1eFBPMGZYdnpxd0t2YTcxN1dSV1lZUEJ4YkFDMDNnQnBoLWVsTmMwMnRqZjEwYXhSWlE3NUY0UDRiSTI0QkM3NHd3RndBdWZqUXdpNzd4dlZpcFh3cmdvOCJ9fQ","payload":"eyJyZXNvdXJjZSI6ImNoYWxsZW5nZSIsInR5cGUiOiJkbnMtMDEiLCJrZXlBdXRob3JpemF0aW9uIjoiWVQxdEs3Nm5EYi1yOHJRM21lT0tHVUMyM2J2emVQZVdFNHg1LWFnU2RZOC5OX2hyNWE0NFJMa05RTnYwVmpWZjg4N2JMTXdIdV80ZGxtbFJHUzZGcTE0In0","signature":"HTiNBDed0FvKKeEcSzYFMv4k4BFojZVjjSipO2Fw4sFzGeIEHN859QWc9benSi3Wry-wO2Z_-X9jJ-EmmSzf5GaqtziCJ0_jDJnqOogbFwhPqa7esoQsEpPDdLIwEofcxoFLLOFzv57DZCS74vKvwJfEqzzhuJ7M258B5khM4_I7Ccs4_aQMVIu0VuXcwhNo4O1MNJPi4PDktUJNbhdxVLs4v1EQu6o4OZ20xQ0MeAhZxXXD_cj2NXW-h5SeeomA578_6g4VkFz3ImIae97nvyTczIWpsvc6TAdFg6lFl0TTPB6nk92p56uZnoUS8a9qlL0hOu2Yv_OS1FQYHWIVNWJuEmNIea6wfP8ph6nifTI-PQJDdqrsfjKHoF7bfULMQeVUpX_qSzBzzH78yfu7J75OTme27Ev6viIeY7lzZmQoC_p-uAKQ6Zlc0GHJjf_pSZWUzCl0Gox_ts7isEloV6QU4uIEhpdIDELa9IRWlh4GEXYOXH7_mZeUeQBfTeOd2RuFqz7YJw_VQTrABRuilRB2ZXkAQgift2Eg2aGiadtXD45uS_ubF-PvSzd2DunWF5_l6FHKdIx3wPJgTxzLBC_2JjPx-p57a9InNRGMnoibwdF6dLcIa2wttAoNOvQuTwVvrX6BHdo-b9_RKN8Aao89m0ErG3TuSS8D5NuFKJc"}'
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
  response:
    status:
      code: 202
      message: Accepted
    headers:
      Server:
      - nginx
      Content-Type:
      - application/json
      Content-Length:
      - '337'
      Boulder-Request-Id:
      - pfGTVYusiY_H_BCLg5gWWWZDG0nmCTXmd5Q578bkD5I
      Boulder-Requester:
      - '496458'
      Link:
      - <https://acme-staging.api.letsencrypt.org/acme/authz/73OZWvTewlUC30b61mXrF2xJCEfzRPseCeoDRVlziTs>;rel="up"
      Location:
      - https://acme-staging.api.letsencrypt.org/acme/challenge/73OZWvTewlUC30b61mXrF2xJCEfzRPseCeoDRVlziTs/16907316
      Replay-Nonce:
      - FdlcZQJqCNxrXorMHyNvQzVf3TeVXQSr9j-w_APIyV4
      Expires:
      - Tue, 15 Nov 2016 15:47:18 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Tue, 15 Nov 2016 15:47:18 GMT
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: |-
        {
          "type": "dns-01",
          "status": "pending",
          "uri": "https://acme-staging.api.letsencrypt.org/acme/challenge/73OZWvTewlUC30b61mXrF2xJCEfzRPseCeoDRVlziTs/16907316",
          "token": "YT1tK76nDb-r8rQ3meOKGUC23bvzePeWE4x5-agSdY8",
          "keyAuthorization": "YT1tK76nDb-r8rQ3meOKGUC23bvzePeWE4x5-agSdY8.N_hr5a44RLkNQNv0VjVf887bLMwHu_4dlmlRGS6Fq14"
        }
    http_version: 
  recorded_at: Tue, 15 Nov 2016 15:47:18 GMT
recorded_with: VCR 3.0.3


================================================
FILE: test/fixtures/vcr_cassettes/acme-new-authz.yml
================================================
---
http_interactions:
- request:
    method: head
    uri: https://acme-staging.api.letsencrypt.org/acme/new-reg
    body:
      encoding: US-ASCII
      string: ''
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept:
      - "*/*"
  response:
    status:
      code: 405
      message: Method Not Allowed
    headers:
      Server:
      - nginx
      Content-Type:
      - application/problem+json
      Content-Length:
      - '91'
      Allow:
      - POST
      Boulder-Request-Id:
      - c1TukrYI7RZgnQOuKPKXqRpWbbyAo5F0jdsJKQ_ROSo
      Replay-Nonce:
      - AeFWUBqFZH1tVwq346N2d647mktaqiRrXUkuy3EULl4
      Expires:
      - Tue, 15 Nov 2016 14:48:26 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Tue, 15 Nov 2016 14:48:26 GMT
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: ''
    http_version:
  recorded_at: Tue, 15 Nov 2016 14:48:26 GMT
- request:
    method: post
    uri: https://acme-staging.api.letsencrypt.org/acme/new-reg
    body:
      encoding: UTF-8
      string: '{"protected":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm5vbmNlIjoiQWVGV1VCcUZaSDF0VndxMzQ2TjJkNjQ3bWt0YXFpUnJYVWt1eTNFVUxsNCIsImp3ayI6eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsIm4iOiI3VUdTN2xVUVZCbzUxVGEwdVhydHA0MXJnLW9ac29zRTBXc3dCc0NadFFOSkRTTjRsYVFSX0owNDVET0RwZWpscVlaRG1laWs3TU44azRoNl84dURhcGJxNTJzRURZNGp4SHctOTFQeEotbEtMb01vQ2x4QWNINDFoam5VUU5EZk1CVHdGTl9qSTNRcUVYZU16cnpzWWNfQ1N5Z2p4aUFDX0NmLXlyLWRuMV9NSjQxaFYxQVdTc1RZd3ZGakQ4bGdXc0dJRVFrcDhWbHZYdGVZWkl0VmpWVG03UTh3Tm11Wm5WQ1drS1hKSmJkSnpiaTlVbmFvQ1ZuR1BmZzBUQm43cjNmV19nOFQ4M1ZJeG5lelRpOV9DUHp0bUlCVFpxWVd3Z21nZ2o4a1gzdzhUcHBWczZOY2FJWWJJYW9aak9IcjdZWW83dUtPWmRVNWtHZkRCemZSbVNMNzZqeVVTY19Ya0RUQzdvMk9KS0tkVGUwd2hOSTFrSUg1R1doS1FfWUhZZTE0cXljMHA3TjBoZ3pERFZ5bGlHMlJsRi1GazEtZ2pLRmZUbEVDdF9BMFcyc3ZTTnpkem1jak9xQjhsNWl0dGsxNF9JZmk3cEdsOUxWZGtRd3FUVVphd20zcVBrcjlrakdpWDhVVTRidjNRNkhQX3FkSjN2bU9pLVJYaEJSbFVTT2hxMjF6NWFKMnZveFFHNFVJSHZPQjYyY3NCT21zeHpiMndQZUxUWHlZN2oyaUJveVlOMmt2UXpHZmxaM3lSdkVvRU42QnlsZFFsRndqa3pTX2dWQXJUcU1aU2NoZnZpSnZHRUpQdktWekx1S01udHBHZ2oxY0xPN0xvdDRsTDBHWVRtSlVEWDRTbU01bEJ2RlMwMXptWC1lWGZlV0NEMmFJcDZ6UU1vOCJ9fQ","payload":"eyJyZXNvdXJjZSI6Im5ldy1yZWciLCJjb250YWN0IjpbIm1haWx0bzptYXhAc3Vic3RyYWt0LmNvbSJdfQ","signature":"XfyNAZXAiAi8Nxv079YQdUDHGAF2i97Q571QOWMCGk-ieqFu5W4wFffHMXibR0F13xO6wILrDU_PZGq3qK-KxnIJ9B98F8vx3IHH4RmkzX9jxdbh3FyadfNE3rs1dGB_8XRZfaSFwt9RbBBgwmF_-HlB073rCA3zY7n01yBP_rZjsHyYuYrDb8JLbPUfxU0z6n2lwAUxVmy-YaiP8A5MV9OEj2udtQXu6vmzZXF0ggTjWe1qdtfD1sRUN9eCYgis4tOqR8U0-DE1QtFoB3H_CC_97zxqWvP0z2UEJoEnfRdwE-K7xKZX2k_pzIVFjOr1GGRNEKnI1xm3mbRmuvm6pPFMPWftRPG9WiporM75pClmL_nsyFVRRz-hRXHMITQ4Ts3zWiNFZc2sXSzG8tHg85ocpCq_aRwcXV68d7I7-kxeXm_4b3iLWFWPYOEy3gmdT8rf6LyqYRpP7s2s5xu-GhxRj8njYcut3USK6yUoSfkSl6n_KPPgpQEnUtPpCEzJXOHVto5IN-lM-cxR4n9tT91HQuDhd9keO_aloqiDsRDDu5Ce_gM6pIeh7srhVTd0wLbAcSBxeqHjnOdpwhfW5duEXFqbAj6Z3CnqxRN8u0Ta4NSds8N7pmza6pvF9tfV6JFnFxbwwmYVKTdKWxLfrx-wA6ZqBp-k9UfgolU4Ou8"}'
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
  response:
    status:
      code: 201
      message: Created
    headers:
      Server:
      - nginx
      Content-Type:
      - application/json
      Content-Length:
      - '914'
      Boulder-Request-Id:
      - nZ-yyZ55akI1j1pyePOKOc-1ZuIoWa1r5FmilihiOrI
      Boulder-Requester:
      - '496323'
      Link:
      - <https://acme-staging.api.letsencrypt.org/acme/new-authz>;rel="next"
      - <https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf>;rel="terms-of-service"
      Location:
      - https://acme-staging.api.letsencrypt.org/acme/reg/496323
      Replay-Nonce:
      - MtjKXaKeqpWpFBsdAS-Kem5ZQgc3qEpIl9Lwh-7VREQ
      X-Frame-Options:
      - DENY
      Strict-Transport-Security:
      - max-age=604800
      Expires:
      - Tue, 15 Nov 2016 14:48:27 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Tue, 15 Nov 2016 14:48:27 GMT
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: |-
        {
          "id": 496323,
          "key": {
            "kty": "RSA",
            "n": "7UGS7lUQVBo51Ta0uXrtp41rg-oZsosE0WswBsCZtQNJDSN4laQR_J045DODpejlqYZDmeik7MN8k4h6_8uDapbq52sEDY4jxHw-91PxJ-lKLoMoClxAcH41hjnUQNDfMBTwFN_jI3QqEXeMzrzsYc_CSygjxiAC_Cf-yr-dn1_MJ41hV1AWSsTYwvFjD8lgWsGIEQkp8VlvXteYZItVjVTm7Q8wNmuZnVCWkKXJJbdJzbi9UnaoCVnGPfg0TBn7r3fW_g8T83VIxnezTi9_CPztmIBTZqYWwgmggj8kX3w8TppVs6NcaIYbIaoZjOHr7YYo7uKOZdU5kGfDBzfRmSL76jyUSc_XkDTC7o2OJKKdTe0whNI1kIH5GWhKQ_YHYe14qyc0p7N0hgzDDVyliG2RlF-Fk1-gjKFfTlECt_A0W2svSNzdzmcjOqB8l5ittk14_Ifi7pGl9LVdkQwqTUZawm3qPkr9kjGiX8UU4bv3Q6HP_qdJ3vmOi-RXhBRlUSOhq21z5aJ2voxQG4UIHvOB62csBOmsxzb2wPeLTXyY7j2iBoyYN2kvQzGflZ3yRvEoEN6ByldQlFwjkzS_gVArTqMZSchfviJvGEJPvKVzLuKMntpGgj1cLO7Lot4lL0GYTmJUDX4SmM5lBvFS01zmX-eXfeWCD2aIp6zQMo8",
            "e": "AQAB"
          },
          "contact": [
            "mailto:max@substrakt.com"
          ],
          "initialIp": "213.123.191.198",
          "createdAt": "2016-11-15T14:48:27.317949602Z",
          "Status": ""
        }
    http_version:
  recorded_at: Tue, 15 Nov 2016 14:48:27 GMT
- request:
    method: post
    uri: https://acme-staging.api.letsencrypt.org/acme/reg/496323
    body:
      encoding: UTF-8
      string: '{"protected":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm5vbmNlIjoiTXRqS1hhS2VxcFdwRkJzZEFTLUtlbTVaUWdjM3FFcElsOUx3aC03VlJFUSIsImp3ayI6eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsIm4iOiI3VUdTN2xVUVZCbzUxVGEwdVhydHA0MXJnLW9ac29zRTBXc3dCc0NadFFOSkRTTjRsYVFSX0owNDVET0RwZWpscVlaRG1laWs3TU44azRoNl84dURhcGJxNTJzRURZNGp4SHctOTFQeEotbEtMb01vQ2x4QWNINDFoam5VUU5EZk1CVHdGTl9qSTNRcUVYZU16cnpzWWNfQ1N5Z2p4aUFDX0NmLXlyLWRuMV9NSjQxaFYxQVdTc1RZd3ZGakQ4bGdXc0dJRVFrcDhWbHZYdGVZWkl0VmpWVG03UTh3Tm11Wm5WQ1drS1hKSmJkSnpiaTlVbmFvQ1ZuR1BmZzBUQm43cjNmV19nOFQ4M1ZJeG5lelRpOV9DUHp0bUlCVFpxWVd3Z21nZ2o4a1gzdzhUcHBWczZOY2FJWWJJYW9aak9IcjdZWW83dUtPWmRVNWtHZkRCemZSbVNMNzZqeVVTY19Ya0RUQzdvMk9KS0tkVGUwd2hOSTFrSUg1R1doS1FfWUhZZTE0cXljMHA3TjBoZ3pERFZ5bGlHMlJsRi1GazEtZ2pLRmZUbEVDdF9BMFcyc3ZTTnpkem1jak9xQjhsNWl0dGsxNF9JZmk3cEdsOUxWZGtRd3FUVVphd20zcVBrcjlrakdpWDhVVTRidjNRNkhQX3FkSjN2bU9pLVJYaEJSbFVTT2hxMjF6NWFKMnZveFFHNFVJSHZPQjYyY3NCT21zeHpiMndQZUxUWHlZN2oyaUJveVlOMmt2UXpHZmxaM3lSdkVvRU42QnlsZFFsRndqa3pTX2dWQXJUcU1aU2NoZnZpSnZHRUpQdktWekx1S01udHBHZ2oxY0xPN0xvdDRsTDBHWVRtSlVEWDRTbU01bEJ2RlMwMXptWC1lWGZlV0NEMmFJcDZ6UU1vOCJ9fQ","payload":"eyJyZXNvdXJjZSI6InJlZyIsImFncmVlbWVudCI6Imh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL2RvY3VtZW50cy9MRS1TQS12MS4xLjEtQXVndXN0LTEtMjAxNi5wZGYifQ","signature":"usC1SwuUilo1mSMP1FV12dezLOtxENX_NCJFkHXywFfT9LfIL13HXkBWi92eg1vvrRtKkjBTrnHFsZ4tPQvCZrZEWLRyyBDf1GXmS9YaYKcMwXKJx6g5lSwdjJ6-oLVvCguJF-eoxz7YsadwuZZ7Pe4U7uOt4ZzZftfLHB2kz2A73tcsvXxJyjQjF_6ZRM6VkPuVcVCxkXG1BvUjQl7B4nwNlXz_ph4vvu5W2QYQD_opLMHE91AAG2sCmxpXxethwrE3zfDk5wb4xWXWeQIjKOfD_GheJ20TisBgRGLkGEIpHRU-V8xMMI6RrU_70s491dRxkyVakeeAN_8naVtMwd8hfTFAfi814ZcNlZuIFK51MlnAeAHB263_EAjN6OFMf7pTw-Ck-PkNryQqilFa8QRsDbp9wgy1lIgcAV2WlHQ0M27Mg5nb-fqaFxgjRpZU24mSavbGu1vZunIKarTR7wL3is1hP8v8EALenq_1lzHSDyr9B_G-uzKP-QEl1t0Nsyd9hLDcrMAK1pQnYce0ShkkNj9WCq4BBpu0-04CN9ooR7PorJJqR3EpftJ8v5bvo3nNfDjuYtIOwXQS5OPRYkHfyzzgJEU9lCVwZScYNfZilNHBSx_rTXZH6KY9cQaB5__Y3atHegmFOBLXbTh47_S6LeWPaWMkrV4i0biFi0I"}'
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
  response:
    status:
      code: 202
      message: Accepted
    headers:
      Server:
      - nginx
      Content-Type:
      - application/json
      Content-Length:
      - '987'
      Boulder-Request-Id:
      - gvHEqmg_DZZReGmZxV4ol4VUPbzujJaXhd4jgKn1LBc
      Boulder-Requester:
      - '496323'
      Link:
      - <https://acme-staging.api.letsencrypt.org/acme/new-authz>;rel="next"
      - <https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf>;rel="terms-of-service"
      Replay-Nonce:
      - BiQgiIOi-1e_tg6Fr21H4sVFDYD8s84VO_WDws0gvXQ
      Expires:
      - Tue, 15 Nov 2016 14:48:27 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Tue, 15 Nov 2016 14:48:27 GMT
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: |-
        {
          "id": 496323,
          "key": {
            "kty": "RSA",
            "n": "7UGS7lUQVBo51Ta0uXrtp41rg-oZsosE0WswBsCZtQNJDSN4laQR_J045DODpejlqYZDmeik7MN8k4h6_8uDapbq52sEDY4jxHw-91PxJ-lKLoMoClxAcH41hjnUQNDfMBTwFN_jI3QqEXeMzrzsYc_CSygjxiAC_Cf-yr-dn1_MJ41hV1AWSsTYwvFjD8lgWsGIEQkp8VlvXteYZItVjVTm7Q8wNmuZnVCWkKXJJbdJzbi9UnaoCVnGPfg0TBn7r3fW_g8T83VIxnezTi9_CPztmIBTZqYWwgmggj8kX3w8TppVs6NcaIYbIaoZjOHr7YYo7uKOZdU5kGfDBzfRmSL76jyUSc_XkDTC7o2OJKKdTe0whNI1kIH5GWhKQ_YHYe14qyc0p7N0hgzDDVyliG2RlF-Fk1-gjKFfTlECt_A0W2svSNzdzmcjOqB8l5ittk14_Ifi7pGl9LVdkQwqTUZawm3qPkr9kjGiX8UU4bv3Q6HP_qdJ3vmOi-RXhBRlUSOhq21z5aJ2voxQG4UIHvOB62csBOmsxzb2wPeLTXyY7j2iBoyYN2kvQzGflZ3yRvEoEN6ByldQlFwjkzS_gVArTqMZSchfviJvGEJPvKVzLuKMntpGgj1cLO7Lot4lL0GYTmJUDX4SmM5lBvFS01zmX-eXfeWCD2aIp6zQMo8",
            "e": "AQAB"
          },
          "contact": [
            "mailto:max@substrakt.com"
          ],
          "agreement": "https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf",
          "initialIp": "213.123.191.198",
          "createdAt": "2016-11-15T14:48:27Z",
          "Status": ""
        }
    http_version:
  recorded_at: Tue, 15 Nov 2016 14:48:27 GMT
- request:
    method: post
    uri: https://acme-staging.api.letsencrypt.org/acme/new-authz
    body:
      encoding: UTF-8
      string: '{"protected":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm5vbmNlIjoiQmlRZ2lJT2ktMWVfdGc2RnIyMUg0c1ZGRFlEOHM4NFZPX1dEd3MwZ3ZYUSIsImp3ayI6eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsIm4iOiI3VUdTN2xVUVZCbzUxVGEwdVhydHA0MXJnLW9ac29zRTBXc3dCc0NadFFOSkRTTjRsYVFSX0owNDVET0RwZWpscVlaRG1laWs3TU44azRoNl84dURhcGJxNTJzRURZNGp4SHctOTFQeEotbEtMb01vQ2x4QWNINDFoam5VUU5EZk1CVHdGTl9qSTNRcUVYZU16cnpzWWNfQ1N5Z2p4aUFDX0NmLXlyLWRuMV9NSjQxaFYxQVdTc1RZd3ZGakQ4bGdXc0dJRVFrcDhWbHZYdGVZWkl0VmpWVG03UTh3Tm11Wm5WQ1drS1hKSmJkSnpiaTlVbmFvQ1ZuR1BmZzBUQm43cjNmV19nOFQ4M1ZJeG5lelRpOV9DUHp0bUlCVFpxWVd3Z21nZ2o4a1gzdzhUcHBWczZOY2FJWWJJYW9aak9IcjdZWW83dUtPWmRVNWtHZkRCemZSbVNMNzZqeVVTY19Ya0RUQzdvMk9KS0tkVGUwd2hOSTFrSUg1R1doS1FfWUhZZTE0cXljMHA3TjBoZ3pERFZ5bGlHMlJsRi1GazEtZ2pLRmZUbEVDdF9BMFcyc3ZTTnpkem1jak9xQjhsNWl0dGsxNF9JZmk3cEdsOUxWZGtRd3FUVVphd20zcVBrcjlrakdpWDhVVTRidjNRNkhQX3FkSjN2bU9pLVJYaEJSbFVTT2hxMjF6NWFKMnZveFFHNFVJSHZPQjYyY3NCT21zeHpiMndQZUxUWHlZN2oyaUJveVlOMmt2UXpHZmxaM3lSdkVvRU42QnlsZFFsRndqa3pTX2dWQXJUcU1aU2NoZnZpSnZHRUpQdktWekx1S01udHBHZ2oxY0xPN0xvdDRsTDBHWVRtSlVEWDRTbU01bEJ2RlMwMXptWC1lWGZlV0NEMmFJcDZ6UU1vOCJ9fQ","payload":"eyJyZXNvdXJjZSI6Im5ldy1hdXRoeiIsImlkZW50aWZpZXIiOnsidHlwZSI6ImRucyIsInZhbHVlIjoid3d3LnN1YnN0cmFrdC5jb20ifX0","signature":"VOvdQAJ2XrgnzHzRzdNualf_RFko12afEJXh2YIWVunTJBOVsD3sTuWMUc9Ut9KsZLNpWqGrknHM6V4SSAFgJhB9CRSTO93SqcdJpMaBy_wLRCRpDdLL_3Iwj5-gTe45GE6lJi8eRDe0D_frKnBjD-OX4SqltHs_0CXpsK4-X2tPJjDlkiZi0ALLjLWJR_DWbSdDEKlrfy1-4qDr-qC_NewLK6uLQCCd3lJM8RYyq90ShvQBg1tIKsKHalff36NEawn4fmFarf9DfOLTC_G2wNyOpBeYSBn6CO0ELvxGVhGCW5Ba24jkvLZBm0deRHwAl0rntCA-8NMC7FbV831tHAm9Zi05upH0jC8pcKMkcbK36Dia0ERZXldKGoevWDWtVrnk-7xWp2NQl_AuuMFAgVtaUoctjPjWQ5WdRSkJ0HzvkPtuqh0fIJlFn5Cj0RsNCRadlEqIZ_CrmtxxfipnBZgd8Qqmv2euiScmGwpljVnYC1GKm_C6pWYvErCmAR-3IZBDiLGWmXBJXyEA0oHan3Ygbcmz1SRAqn2qeJ369wrrUW6CPKswTiC_jbHLevn62OBPQK3KCcLMvHB0RNSbIwPi_fO44ayAna5jLUudBdVQmnar6f9LhQBU588KuHLdLY9BeIEGAcDwZ87QUso89HbjXvokQECtqiRSC7HofQU"}'
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
  response:
    status:
      code: 201
      message: Created
    headers:
      Server:
      - nginx
      Content-Type:
      - application/json
      Content-Length:
      - '1011'
      Boulder-Request-Id:
      - 0heYs4WC56eEZj84h-_nixywOKre6fQ3DP4Rc0vMM78
      Boulder-Requester:
      - '496323'
      Link:
      - <https://acme-staging.api.letsencrypt.org/acme/new-cert>;rel="next"
      Location:
      - https://acme-staging.api.letsencrypt.org/acme/authz/XiSJFBXqy_UyLBn8VqLNi9Efon9ED0rqva0QlOwzl0Q
      Replay-Nonce:
      - pOV-Ysk81zbjs4sNtmlTh2OSk81V-fiyqateRvxcK1g
      X-Frame-Options:
      - DENY
      Strict-Transport-Security:
      - max-age=604800
      Expires:
      - Tue, 15 Nov 2016 14:48:28 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Tue, 15 Nov 2016 14:48:28 GMT
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: |-
        {
          "identifier": {
            "type": "dns",
            "value": "www.substrakt.com"
          },
          "status": "pending",
          "expires": "2016-11-22T14:48:28.313172365Z",
          "challenges": [
            {
              "type": "http-01",
              "status": "pending",
              "uri": "https://acme-staging.api.letsencrypt.org/acme/challenge/XiSJFBXqy_UyLBn8VqLNi9Efon9ED0rqva0QlOwzl0Q/16905560",
              "token": "UaQ6dLdzwTdeI6PjyjQt3yU0tj59o-qAZCstMrEqWGE"
            },
            {
              "type": "dns-01",
              "status": "pending",
              "uri": "https://acme-staging.api.letsencrypt.org/acme/challenge/XiSJFBXqy_UyLBn8VqLNi9Efon9ED0rqva0QlOwzl0Q/16905561",
              "token": "CUsaZDcAW7vkB-A2C9NKXZYoDFcPPcY1pQDi1KK3HbU"
            },
            {
              "type": "tls-sni-01",
              "status": "pending",
              "uri": "https://acme-staging.api.letsencrypt.org/acme/challenge/XiSJFBXqy_UyLBn8VqLNi9Efon9ED0rqva0QlOwzl0Q/16905562",
              "token": "Cdgs76wiVM_S3qR9ek5oeG3IHeKHv1l4RK5pOSuKD4I"
            }
          ],
          "combinations": [
            [
              2
            ],
            [
              1
            ],
            [
              0
            ]
          ]
        }
    http_version:
  recorded_at: Tue, 15 Nov 2016 14:48:28 GMT
- request:
    method: post
    uri: https://www.cloudflare.com/api_json.html
    body:
      encoding: US-ASCII
      string: a=rec_new&z=substrakt.com&type=TXT&name=_acme-challenge.www.substrakt.com&content=T1AEbbzVT91Ub5rFzWIwP7nC0a3sQl8xSyRHfdGMsyA&ttl=1&service_mode=1&tkn=testtoken&u=max%40substrakt.com
    headers:
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
      User-Agent:
      - Ruby
      Content-Type:
      - application/x-www-form-urlencoded
  response:
    status:
      code: 200
      message: OK
    headers:
      Date:
      - Tue, 15 Nov 2016 14:48:29 GMT
      Content-Type:
      - application/json
      Transfer-Encoding:
      - chunked
      Connection:
      - keep-alive
      Set-Cookie:
      - CF_UALE=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0
      - __cfduid=dbc1ccfcd37ce095508fc0f7ef23e13fc1479221308; expires=Wed, 15-Nov-17
        14:48:28 GMT; path=/; domain=.cloudflare.com; HttpOnly
      - vses2=30v445kufo2h1gvajafrvigbr4; path=/; domain=www.cloudflare.com; secure;
        HttpOnly
      Expires:
      - Thu, 19 Nov 1981 08:52:00 GMT
      Cache-Control:
      - no-store, no-cache, must-revalidate, post-check=0, pre-check=0
      Pragma:
      - no-cache
      Strict-Transport-Security:
      - max-age=31536000
      X-Content-Type-Options:
      - nosniff
      X-Frame-Options:
      - SAMEORIGIN
      Content-Security-Policy:
      - default-src 'self' https://*; script-src 'self' 'unsafe-inline' 'unsafe-eval'
        https://* data:; img-src 'self' https://* data:; style-src 'self' 'unsafe-inline'
        https://*; font-src 'self' https://* data:; frame-src https://*; connect-src
        'self' https://* wss://*.zopim.com data:;
      X-Xss-Protection:
      - 1; mode=block
      Server:
      - cloudflare-nginx
      Cf-Ray:
      - 3023811bbb123608-LHR
    body:
      encoding: ASCII-8BIT
      string: '{"request":{"act":"rec_new"},"response":{"rec":{"obj":{"rec_id":"658540537","rec_hash":"4f3e50de88be57ccc4c67941099a4db9","zone_name":"substrakt.com","name":"_acme-challenge.www.substrakt.com","display_name":"_acme-challenge.www","type":"TXT","prio":null,"content":"T1AEbbzVT91Ub5rFzWIwP7nC0a3sQl8xSyRHfdGMsyA","display_content":"T1AEbbzVT91Ub5rFzWIwP7nC0a3sQl8xSyRHfdGMsyA","ttl":"1","ttl_ceil":86400,"ssl_id":"5084311","ssl_status":"V","ssl_expires_on":null,"auto_ttl":1,"service_mode":"0","props":{"proxiable":0,"cloud_on":0,"cf_open":1,"vanity_lock":0,"ssl":1,"expired_ssl":0,"expiring_ssl":0,"pending_ssl":0}}}},"result":"success","msg":null}'
    http_version:
  recorded_at: Tue, 15 Nov 2016 14:48:29 GMT
- request:
    method: post
    uri: https://acme-staging.api.letsencrypt.org/acme/new-authz
    body:
      encoding: UTF-8
      string: '{"protected":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm5vbmNlIjoicE9WLVlzazgxemJqczRzTnRtbFRoMk9TazgxVi1maXlxYXRlUnZ4Y0sxZyIsImp3ayI6eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsIm4iOiI3VUdTN2xVUVZCbzUxVGEwdVhydHA0MXJnLW9ac29zRTBXc3dCc0NadFFOSkRTTjRsYVFSX0owNDVET0RwZWpscVlaRG1laWs3TU44azRoNl84dURhcGJxNTJzRURZNGp4SHctOTFQeEotbEtMb01vQ2x4QWNINDFoam5VUU5EZk1CVHdGTl9qSTNRcUVYZU16cnpzWWNfQ1N5Z2p4aUFDX0NmLXlyLWRuMV9NSjQxaFYxQVdTc1RZd3ZGakQ4bGdXc0dJRVFrcDhWbHZYdGVZWkl0VmpWVG03UTh3Tm11Wm5WQ1drS1hKSmJkSnpiaTlVbmFvQ1ZuR1BmZzBUQm43cjNmV19nOFQ4M1ZJeG5lelRpOV9DUHp0bUlCVFpxWVd3Z21nZ2o4a1gzdzhUcHBWczZOY2FJWWJJYW9aak9IcjdZWW83dUtPWmRVNWtHZkRCemZSbVNMNzZqeVVTY19Ya0RUQzdvMk9KS0tkVGUwd2hOSTFrSUg1R1doS1FfWUhZZTE0cXljMHA3TjBoZ3pERFZ5bGlHMlJsRi1GazEtZ2pLRmZUbEVDdF9BMFcyc3ZTTnpkem1jak9xQjhsNWl0dGsxNF9JZmk3cEdsOUxWZGtRd3FUVVphd20zcVBrcjlrakdpWDhVVTRidjNRNkhQX3FkSjN2bU9pLVJYaEJSbFVTT2hxMjF6NWFKMnZveFFHNFVJSHZPQjYyY3NCT21zeHpiMndQZUxUWHlZN2oyaUJveVlOMmt2UXpHZmxaM3lSdkVvRU42QnlsZFFsRndqa3pTX2dWQXJUcU1aU2NoZnZpSnZHRUpQdktWekx1S01udHBHZ2oxY0xPN0xvdDRsTDBHWVRtSlVEWDRTbU01bEJ2RlMwMXptWC1lWGZlV0NEMmFJcDZ6UU1vOCJ9fQ","payload":"eyJyZXNvdXJjZSI6Im5ldy1hdXRoeiIsImlkZW50aWZpZXIiOnsidHlwZSI6ImRucyIsInZhbHVlIjoic3Vic3RyYWt0LmNvbSJ9fQ","signature":"6HzorSXkl3L60YCtIUlWjPm_7pq_pUWhnK4DdJMnKNuBp1oTr5-XutDsfakiqVn8p7HQ3SsMIm4R03ZnpUhG65dUa8GybXYeQ4C0BL5voUVsAG6CCNjUHd3N_EiqIYDXBabWxQkb_7TIADTRMcEIdkqgRTX6CZBwdduIXGmHSR8d-nsTYqtm7-9uZ-KOEWo4M_X78yP8mfPniCyAtfAwIzXXRivN4KqjurAbkdjBKQMUfIx7VeUEkpmGMMnPTovPiRfaOvd2KTf2KL2Eukw8QvDDPpSnz2LlafbbT7xQAEguduUygGVehEW5iy5UhC3e2o6Dy_KIR1NhLnVqZVFIa7GTeRJw3SnbO5MEDhmTR7fUMLEhdggGiCjD3MudRpdAqrCVFUPchMfZkAYw8QNrvKGs2MSi_Dr3S2VHfZK5rd47l_ieGyX9TEU1b_aUJatQfyps-CdoJR6uGYg6dBCEDUOg0BTTnlb0xb_k4tZ-Q3SLfmjxY08ZlAg5kzMXHTthn_UMmNo5FifFM0orROIwte57LLwq-OEjaTrT0I8Q6Qh1g4WX_jBzF_i71YDR2Pr_VoMVyvGYnHNKv2UL3qCxIBMgk5irq9dydK2dCYf-rwQbHMKBAjoBrl0YYRhegTCxBKLKAIho_DGpdFe4fGzshOKgRxE0itkxTy9ufuGNlD8"}'
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
  response:
    status:
      code: 201
      message: Created
    headers:
      Server:
      - nginx
      Content-Type:
      - application/json
      Content-Length:
      - '1007'
      Boulder-Request-Id:
      - qEMT7nuW_s51mabn-LNGuD_Yg34vKXn8tDXGEKaShx4
      Boulder-Requester:
      - '496323'
      Link:
      - <https://acme-staging.api.letsencrypt.org/acme/new-cert>;rel="next"
      Location:
      - https://acme-staging.api.letsencrypt.org/acme/authz/qt2yNI_uWEaOuCPGP_ittq1F2155pRUoIu6WXxBzvTY
      Replay-Nonce:
      - lSLVb3oO87aNOdjiYR_kEK5_zNG6WKJGA76EKGQZbrY
      X-Frame-Options:
      - DENY
      Strict-Transport-Security:
      - max-age=604800
      Expires:
      - Tue, 15 Nov 2016 14:48:29 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Tue, 15 Nov 2016 14:48:29 GMT
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: |-
        {
          "identifier": {
            "type": "dns",
            "value": "substrakt.com"
          },
          "status": "pending",
          "expires": "2016-11-22T14:48:29.335487866Z",
          "challenges": [
            {
              "type": "tls-sni-01",
              "status": "pending",
              "uri": "https://acme-staging.api.letsencrypt.org/acme/challenge/qt2yNI_uWEaOuCPGP_ittq1F2155pRUoIu6WXxBzvTY/16905563",
              "token": "JapIxchqTYiV8mNPXx7cluko_FoHVj-f-c4WM9lYlc4"
            },
            {
              "type": "http-01",
              "status": "pending",
              "uri": "https://acme-staging.api.letsencrypt.org/acme/challenge/qt2yNI_uWEaOuCPGP_ittq1F2155pRUoIu6WXxBzvTY/16905564",
              "token": "27QKuPw2rjpgpRk0sS8uAj_sRJ7aABQsHyzCYZbDBOM"
            },
            {
              "type": "dns-01",
              "status": "pending",
              "uri": "https://acme-staging.api.letsencrypt.org/acme/challenge/qt2yNI_uWEaOuCPGP_ittq1F2155pRUoIu6WXxBzvTY/16905565",
              "token": "GuVnBgIrY1TscKVedwhrhzGucaW7zSyYVCDDc8qypvI"
            }
          ],
          "combinations": [
            [
              1
            ],
            [
              0
            ],
            [
              2
            ]
          ]
        }
    http_version:
  recorded_at: Tue, 15 Nov 2016 14:48:29 GMT
- request:
    method: post
    uri: https://www.cloudflare.com/api_json.html
    body:
      encoding: US-ASCII
      string: a=rec_new&z=substrakt.com&type=TXT&name=_acme-challenge.substrakt.com&content=iS3AXcwn8hqJ5M0HWYj44GMrQCfD-faRnC_sZX-lGmI&ttl=1&service_mode=1&tkn=testtoken&u=max%40substrakt.com
    headers:
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
      User-Agent:
      - Ruby
      Content-Type:
      - application/x-www-form-urlencoded
  response:
    status:
      code: 200
      message: OK
    headers:
      Date:
      - Tue, 15 Nov 2016 14:48:29 GMT
      Content-Type:
      - application/json
      Transfer-Encoding:
      - chunked
      Connection:
      - keep-alive
      Set-Cookie:
      - CF_UALE=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0
      - __cfduid=dae730d5524173a9399243eef348457781479221309; expires=Wed, 15-Nov-17
        14:48:29 GMT; path=/; domain=.cloudflare.com; HttpOnly
      - vses2=jqh79kdlqq9cn60dldl8k7ef53; path=/; domain=www.cloudflare.com; secure;
        HttpOnly
      Expires:
      - Thu, 19 Nov 1981 08:52:00 GMT
      Cache-Control:
      - no-store, no-cache, must-revalidate, post-check=0, pre-check=0
      Pragma:
      - no-cache
      Strict-Transport-Security:
      - max-age=31536000
      X-Content-Type-Options:
      - nosniff
      X-Frame-Options:
      - SAMEORIGIN
      Content-Security-Policy:
      - default-src 'self' https://*; script-src 'self' 'unsafe-inline' 'unsafe-eval'
        https://* data:; img-src 'self' https://* data:; style-src 'self' 'unsafe-inline'
        https://*; font-src 'self' https://* data:; frame-src https://*; connect-src
        'self' https://* wss://*.zopim.com data:;
      X-Xss-Protection:
      - 1; mode=block
      Server:
      - cloudflare-nginx
      Cf-Ray:
      - 30238120abec34ee-LHR
    body:
      encoding: ASCII-8BIT
      string: '{"request":{"act":"rec_new"},"response":{"rec":{"obj":{"rec_id":"658540546","rec_hash":"9d765d7ed469c238d50a316d8a5731a3","zone_name":"substrakt.com","name":"_acme-challenge.substrakt.com","display_name":"_acme-challenge","type":"TXT","prio":null,"content":"iS3AXcwn8hqJ5M0HWYj44GMrQCfD-faRnC_sZX-lGmI","display_content":"iS3AXcwn8hqJ5M0HWYj44GMrQCfD-faRnC_sZX-lGmI","ttl":"1","ttl_ceil":86400,"ssl_id":"5084311","ssl_status":"V","ssl_expires_on":null,"auto_ttl":1,"service_mode":"0","props":{"proxiable":0,"cloud_on":0,"cf_open":1,"vanity_lock":0,"ssl":1,"expired_ssl":0,"expiring_ssl":0,"pending_ssl":0}}}},"result":"success","msg":null}'
    http_version:
  recorded_at: Tue, 15 Nov 2016 14:48:29 GMT
recorded_with: VCR 3.0.3


================================================
FILE: test/fixtures/vcr_cassettes/acme-new-reg-debug.yml
================================================
---
http_interactions:
- request:
    method: head
    uri: https://acme-staging.api.letsencrypt.org/acme/new-reg
    body:
      encoding: US-ASCII
      string: ''
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept:
      - "*/*"
  response:
    status:
      code: 405
      message: Method Not Allowed
    headers:
      Server:
      - nginx
      Content-Type:
      - application/problem+json
      Content-Length:
      - '91'
      Allow:
      - POST
      Boulder-Request-Id:
      - UWpOUWqqFqqjOOwYsxJaVNe8YMS93yrpHx5IvQWNqfw
      Replay-Nonce:
      - MXk8W4jN2w39jf6mWaSzMCZDxeLY9QApxfD8P7HdR90
      Expires:
      - Tue, 15 Nov 2016 14:41:55 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Tue, 15 Nov 2016 14:41:55 GMT
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: ''
    http_version: 
  recorded_at: Tue, 15 Nov 2016 14:41:55 GMT
- request:
    method: post
    uri: https://acme-staging.api.letsencrypt.org/acme/new-reg
    body:
      encoding: UTF-8
      string: '{"protected":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm5vbmNlIjoiTVhrOFc0ak4ydzM5amY2bVdhU3pNQ1pEeGVMWTlRQXB4ZkQ4UDdIZFI5MCIsImp3ayI6eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsIm4iOiIxUFU1Y1BKejMxeDJWTTdlNFN2TVZYa1gzTHJ3cVhjaVNaTmhYMFNhQXVEMjYxVHVzbU1mdFI2aWZfYmxfa21acFVhSEM4bkszS3JyQ3hFdE1sQlBDTmFIR1Y3M0k0WlRLSVpDZWp2RU5yUU5idmxLWnlUREo3VFNLOE95VWpXQ1VYX3EtUFJJblpmelR0aFRlRTNRRFpVXzFINHlWTVI1TFpVTUhMY2FqQUVGNWhMc2NyYjRsaWQtT3dHR1o4eFVMTDQtRXdscDM5OEl2TnlGRjcwQmhmOUZlX1ZTZDlYWEJ2LTczekhNS3JKT3hxQjFLcWxvRGd6SGJlR2NEVFktLS1ZQ1ZIX0JRS2o3NkZIdEFaMFZadjFZekhqcVdIRTRWRk5iMlp1NWVKa2psRmhJaE5xdnhRcHZnZ0tlamNVWndzMFFoX3FnZ2c4RW9kamtvelZneHhXdFllS0FBdWNISTFtdXZOWWFFMHNWQ0hoRkRraUY5MExqc2RWMGptLWlQaVpQcmxYSDF5QVl1UEYxZ3pDSVZRR051TWwyYVZxMDNxQ3FXa25uNVVNcXdMZndXVHRMMmRaclBBWXVyOVA0UGN6TmdLaGt0ellZSXYzdk1wTWdWT0UwTHl5MS1FVmFFXzBvR0lBYkhGWjRTVFlRQks2QjZYMzBzN3pDQmRSWmZwUUIyLTF4TjhyeGR2LTA5NWdqdU9DU29wd1l2eVFTd2ZCM2RuWDE0QWFUbEdPQjBMWFktOU4wYjdqNmZKRDd1WmctMFJYQkxHeVg4QWFmaFhmNS1kVkVVZGE0OFowN3k2QV81WElGOVFZT1liSDhOalJ4MlRwdlRBNkxrYVNpNEpjQ2dhWDhuelBiWGVjUkdoM2EtU0RGX3B0TDNFSFhOUVAtVkN2bVhORSJ9fQ","payload":"eyJyZXNvdXJjZSI6Im5ldy1yZWciLCJjb250YWN0IjpbIm1haWx0bzp0ZXN0QGV4YW1wbGUuY29tIl19","signature":"pW6vt3Z3vk_VQ78QEa_-I84r14wo8rvT9Q2AIKu-IOJ0a4wqPUlb8fOIpctw_YCNQ7wePiTlzbSSLw_nxHE17Ex4gSluHp0WANAIYAUjBf21F3eGNddlaXhCmRPNdiKEGOCBDD27NLk4VySXq837nPXgi2QbExMRc-4CZmf8HqZkCzYk08rurhDTTviF1ddsj5iMQFLWffIQ6gPa3bwCgyqFXa4qHxPgUBxiZJmjkOED_1VGDEo6nLOyXcMZ7DFx9-df5BeMJYaDY54XlpkqoxA3MFW9kVD2RGe1ntsc4Q_DqPU8iGF_d3qgrzGUINM2EpFZDqnuJmMg4Mcwpz7WFOlBRLA4j6ptqtHes8YlB3lSb-E-TQ92XOksWTnjHAONAef35pjCYMtGuAf3rz70qniHFCg2K0hJHj9-0Y1KieXN2As6wkWhhun1uT3m4d-TYtR1Oa1CLtjsAMx1ySsTlB3RWh_IIUUgG9kjYSjazKdrSTUuf8BfxtOrPZH72Mo3f-cS6QJ7kIxjwtEue2Nv161G08RiYxbfkfBy7VQ9tuyFbYxTx5eCPsoRDfZUajpFXIH9tfw4wG0OULVokIbd-mHqCIEeUsRzQZFj5mKk3oLsE0PZfWTBffq-W2uvINDVtTPvkd0Jp3quUgLuRGTGJVln6jWlQ6vM6TRKFuCyPGA"}'
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
  response:
    status:
      code: 201
      message: Created
    headers:
      Server:
      - nginx
      Content-Type:
      - application/json
      Content-Length:
      - '913'
      Boulder-Request-Id:
      - 5LZis7RtRmya02s6cXLWQFhwp8JRZgS0vi-IRQByLkE
      Boulder-Requester:
      - '496313'
      Link:
      - <https://acme-staging.api.letsencrypt.org/acme/new-authz>;rel="next"
      - <https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf>;rel="terms-of-service"
      Location:
      - https://acme-staging.api.letsencrypt.org/acme/reg/496313
      Replay-Nonce:
      - bsGm96gV303IXx_O1Pf9c140KSjsnr7Ge-TNX992vPY
      X-Frame-Options:
      - DENY
      Strict-Transport-Security:
      - max-age=604800
      Expires:
      - Tue, 15 Nov 2016 14:41:56 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Tue, 15 Nov 2016 14:41:56 GMT
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: |-
        {
          "id": 496313,
          "key": {
            "kty": "RSA",
            "n": "1PU5cPJz31x2VM7e4SvMVXkX3LrwqXciSZNhX0SaAuD261TusmMftR6if_bl_kmZpUaHC8nK3KrrCxEtMlBPCNaHGV73I4ZTKIZCejvENrQNbvlKZyTDJ7TSK8OyUjWCUX_q-PRInZfzTthTeE3QDZU_1H4yVMR5LZUMHLcajAEF5hLscrb4lid-OwGGZ8xULL4-Ewlp398IvNyFF70Bhf9Fe_VSd9XXBv-73zHMKrJOxqB1KqloDgzHbeGcDTY---YCVH_BQKj76FHtAZ0VZv1YzHjqWHE4VFNb2Zu5eJkjlFhIhNqvxQpvggKejcUZws0Qh_qggg8EodjkozVgxxWtYeKAAucHI1muvNYaE0sVCHhFDkiF90LjsdV0jm-iPiZPrlXH1yAYuPF1gzCIVQGNuMl2aVq03qCqWknn5UMqwLfwWTtL2dZrPAYur9P4PczNgKhktzYYIv3vMpMgVOE0Lyy1-EVaE_0oGIAbHFZ4STYQBK6B6X30s7zCBdRZfpQB2-1xN8rxdv-095gjuOCSopwYvyQSwfB3dnX14AaTlGOB0LXY-9N0b7j6fJD7uZg-0RXBLGyX8AafhXf5-dVEUda48Z07y6A_5XIF9QYOYbH8NjRx2TpvTA6LkaSi4JcCgaX8nzPbXecRGh3a-SDF_ptL3EHXNQP-VCvmXNE",
            "e": "AQAB"
          },
          "contact": [
            "mailto:test@example.com"
          ],
          "initialIp": "213.123.191.198",
          "createdAt": "2016-11-15T14:41:56.595826055Z",
          "Status": ""
        }
    http_version: 
  recorded_at: Tue, 15 Nov 2016 14:41:56 GMT
- request:
    method: post
    uri: https://acme-staging.api.letsencrypt.org/acme/reg/496313
    body:
      encoding: UTF-8
      string: '{"protected":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm5vbmNlIjoiYnNHbTk2Z1YzMDNJWHhfTzFQZjljMTQwS1Nqc25yN0dlLVROWDk5MnZQWSIsImp3ayI6eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsIm4iOiIxUFU1Y1BKejMxeDJWTTdlNFN2TVZYa1gzTHJ3cVhjaVNaTmhYMFNhQXVEMjYxVHVzbU1mdFI2aWZfYmxfa21acFVhSEM4bkszS3JyQ3hFdE1sQlBDTmFIR1Y3M0k0WlRLSVpDZWp2RU5yUU5idmxLWnlUREo3VFNLOE95VWpXQ1VYX3EtUFJJblpmelR0aFRlRTNRRFpVXzFINHlWTVI1TFpVTUhMY2FqQUVGNWhMc2NyYjRsaWQtT3dHR1o4eFVMTDQtRXdscDM5OEl2TnlGRjcwQmhmOUZlX1ZTZDlYWEJ2LTczekhNS3JKT3hxQjFLcWxvRGd6SGJlR2NEVFktLS1ZQ1ZIX0JRS2o3NkZIdEFaMFZadjFZekhqcVdIRTRWRk5iMlp1NWVKa2psRmhJaE5xdnhRcHZnZ0tlamNVWndzMFFoX3FnZ2c4RW9kamtvelZneHhXdFllS0FBdWNISTFtdXZOWWFFMHNWQ0hoRkRraUY5MExqc2RWMGptLWlQaVpQcmxYSDF5QVl1UEYxZ3pDSVZRR051TWwyYVZxMDNxQ3FXa25uNVVNcXdMZndXVHRMMmRaclBBWXVyOVA0UGN6TmdLaGt0ellZSXYzdk1wTWdWT0UwTHl5MS1FVmFFXzBvR0lBYkhGWjRTVFlRQks2QjZYMzBzN3pDQmRSWmZwUUIyLTF4TjhyeGR2LTA5NWdqdU9DU29wd1l2eVFTd2ZCM2RuWDE0QWFUbEdPQjBMWFktOU4wYjdqNmZKRDd1WmctMFJYQkxHeVg4QWFmaFhmNS1kVkVVZGE0OFowN3k2QV81WElGOVFZT1liSDhOalJ4MlRwdlRBNkxrYVNpNEpjQ2dhWDhuelBiWGVjUkdoM2EtU0RGX3B0TDNFSFhOUVAtVkN2bVhORSJ9fQ","payload":"eyJyZXNvdXJjZSI6InJlZyIsImFncmVlbWVudCI6Imh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL2RvY3VtZW50cy9MRS1TQS12MS4xLjEtQXVndXN0LTEtMjAxNi5wZGYifQ","signature":"bjfzi6JMUt1PdqgoOyxDbbrSQvdX8paNbs_Y88AeNjELF3nZGP-mddEi_E1xZVcl-5iMv3Nk7E-BA54fp0AsnKogWskEPoezh6KMnNVbdtAmG5iNCCrve6QnJ-qIUSTIHqEqefwSk7odg3lnYk2WqKhYDJ0brLmRWQ_VEKa-Jy24fl3h1pypJRAIqjh3fckQk_OVfTmdBP8zyf7Y201Nh6e3aDFXHuHrvMUIxShzb8IKK_dARBllextzhFKD6UNk9Ls2u0E4HoUunMa2n68zkOrWmPPJ2qH5Z4va8anNwcnbHGLKD36Qs6nHn9Xty5TnL0fUc1U9AFQcsTMM3Z6DM6CIgKA6QSiE3Z1VPpHB_It87DVf8tPGJFGwD3iyx-OKhTxvyUHHmTPmk88PwLr_13ewbQdllj7limSf-4cizpwSPqV-pcgWZ1FAMex9RTCVFL_AlGD5RaiEXE1JD_KirhHFiiQD8CdyEdmlQ3VWCX4tBZ8JqMb-RhJWyVZtKBC2Hz5Ip7GbfHScdSxtu2ZpV9ShMdirkK-c730xQiIGlQ4NqhHXB7T4B-FuPdZltsABKZ9L3OzAPwkpsB6tXmHVTc_nQCOc4ihhKsSx64EIgQnDLj7zsqTEDhhkssOJbH_suzdS9UGXvLZtnZmnTddhRO6ly3Y49mqxYfwYaRBEGnc"}'
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
  response:
    status:
      code: 202
      message: Accepted
    headers:
      Server:
      - nginx
      Content-Type:
      - application/json
      Content-Length:
      - '986'
      Boulder-Request-Id:
      - wXU0LXZn388qMI7nkiGmMjtOLuTL1YXga6TXgEkcaY0
      Boulder-Requester:
      - '496313'
      Link:
      - <https://acme-staging.api.letsencrypt.org/acme/new-authz>;rel="next"
      - <https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf>;rel="terms-of-service"
      Replay-Nonce:
      - k6q9ogZWb4QIIrozUEITO8j5CaX26WWwXJH0wCqdtis
      Expires:
      - Tue, 15 Nov 2016 14:41:57 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Tue, 15 Nov 2016 14:41:57 GMT
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: |-
        {
          "id": 496313,
          "key": {
            "kty": "RSA",
            "n": "1PU5cPJz31x2VM7e4SvMVXkX3LrwqXciSZNhX0SaAuD261TusmMftR6if_bl_kmZpUaHC8nK3KrrCxEtMlBPCNaHGV73I4ZTKIZCejvENrQNbvlKZyTDJ7TSK8OyUjWCUX_q-PRInZfzTthTeE3QDZU_1H4yVMR5LZUMHLcajAEF5hLscrb4lid-OwGGZ8xULL4-Ewlp398IvNyFF70Bhf9Fe_VSd9XXBv-73zHMKrJOxqB1KqloDgzHbeGcDTY---YCVH_BQKj76FHtAZ0VZv1YzHjqWHE4VFNb2Zu5eJkjlFhIhNqvxQpvggKejcUZws0Qh_qggg8EodjkozVgxxWtYeKAAucHI1muvNYaE0sVCHhFDkiF90LjsdV0jm-iPiZPrlXH1yAYuPF1gzCIVQGNuMl2aVq03qCqWknn5UMqwLfwWTtL2dZrPAYur9P4PczNgKhktzYYIv3vMpMgVOE0Lyy1-EVaE_0oGIAbHFZ4STYQBK6B6X30s7zCBdRZfpQB2-1xN8rxdv-095gjuOCSopwYvyQSwfB3dnX14AaTlGOB0LXY-9N0b7j6fJD7uZg-0RXBLGyX8AafhXf5-dVEUda48Z07y6A_5XIF9QYOYbH8NjRx2TpvTA6LkaSi4JcCgaX8nzPbXecRGh3a-SDF_ptL3EHXNQP-VCvmXNE",
            "e": "AQAB"
          },
          "contact": [
            "mailto:test@example.com"
          ],
          "agreement": "https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf",
          "initialIp": "213.123.191.198",
          "createdAt": "2016-11-15T14:41:56Z",
          "Status": ""
        }
    http_version: 
  recorded_at: Tue, 15 Nov 2016 14:41:57 GMT
recorded_with: VCR 3.0.3


================================================
FILE: test/fixtures/vcr_cassettes/acme-new-reg.yml
================================================
---
http_interactions:
- request:
    method: head
    uri: https://acme-v01.api.letsencrypt.org/acme/new-reg
    body:
      encoding: US-ASCII
      string: ''
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept:
      - "*/*"
  response:
    status:
      code: 405
      message: Method Not Allowed
    headers:
      Server:
      - nginx
      Content-Type:
      - application/problem+json
      Content-Length:
      - '91'
      Allow:
      - POST
      Boulder-Request-Id:
      - GfiXJrw6eCPE_k8PjG53XawaQeRnV2PUX9bGLaT3C9s
      Replay-Nonce:
      - MVNQOuBotmhIFlOm6k-H0vEueFFwUFm5KGxOv4EMtRc
      Expires:
      - Tue, 15 Nov 2016 14:41:48 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Tue, 15 Nov 2016 14:41:48 GMT
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: ''
    http_version: 
  recorded_at: Tue, 15 Nov 2016 14:41:49 GMT
- request:
    method: post
    uri: https://acme-v01.api.letsencrypt.org/acme/new-reg
    body:
      encoding: UTF-8
      string: '{"protected":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm5vbmNlIjoiTVZOUU91Qm90bWhJRmxPbTZrLUgwdkV1ZUZGd1VGbTVLR3hPdjRFTXRSYyIsImp3ayI6eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsIm4iOiJ1dnNtRnNmQ0dvWEktSlJjcWJqZzlVZjdvbEtGX1NtbDA4WlRqUktLVF8yemNOVFJ1S3dmc0U4TjZFSi1XZGllU1AyY2M4WGZJTEtRaDIxNFZORkozdkxNb3BzRzc0NXZ1eWJSeTZIYWZ0UTNLVEQwVXF6MEdzLWhnRGRnVHF3SGQ2Q3ZicWpvemVBLTNsWXJSUkxrRW1XQTE0S2JxTWxqN1F0MC1mRmh1cjJuMmhhUllFTnFoNkgybVNXYTc1aFA3Nk1FcEEzeFhiVnp0Q3dXaVRFS1lXZ3NUX182RmNxTjlsMXRRM3BFR0wzVzVNNVNqMWticTRROF9pRXJtdmxUZEFHQ1VYQ2dldUR3ZXBTQk1pTjFHcGc1YVozYTEwUEpIaWdVbTU4dG9SbjRHbHROdm8yVXhSWlVPcUpFdWgwMlpWajFFTWQydWVTWXZqOHR5bzluR3ItNzFxNlNsem12SzN4NTk1dDVqWGg5RXQ4b3hkTVlMR1Z3am9pV1Bqblk5TnNwekcyUnM5dnVROXVhUDJtN0ZoWEVPbm9XZHpBTkE2VE1FazVEM0ZEZnF2bS1kRGl6b3g2QWk0M3piTmRhbmtESjF0bEdXVG1qMUJvYlNhcEt1MmFPeUhwRUtMZTV1eWEzVldGbFRxRnctSFRXMmpKaERkNi1RMk04cTF2aDY1UzVWLWc4czYwM1hLVW9xU21VTVluRDdRbGdEYmlQLWpNdW1VSUt1VXRDajFTejJzZXBKUTAyRjJkb1hoMjdVc1ItbTR4Qm9wZzVhZVlSN3g2YklqVTNvNV93MjZ4UWxod04wMW1jbVZ6WVFtcjIydVpSNnU0ZUhfX3MtazRTTzNuNElYRVk0NkJwTEZZcE11VnRuanY5akFuWUVTeVNzMlQ3bnBJZ0lRTSJ9fQ","payload":"eyJyZXNvdXJjZSI6Im5ldy1yZWciLCJjb250YWN0IjpbIm1haWx0bzp0ZXN0QGV4YW1wbGUuY29tIl19","signature":"lATsODydPbG1heB9xuKz2ol-N_k6eFIU4skagAbeWl54WQlgFRhAfZc3xAqH3Wb46z1jlT5saS2CNZJfCKPXH9IXa9xYbyJb8xroVJwIUwNAhf7cuKCYQnG5X5YAuFqmdoh_gRdN6gnviQ2AX6YrRsN5gX7e8kZ86kvpKKiL13qMssYrdz27-dqa4as8_uIYj9-79Av_l63kI2RPJ_c8r7o89wbisidn8EB1fIV03_qr6LoH2NGAQLQih7NNvD3L99B_Fb-PtzRckc7oCNXYLg6yBmWXrKr6F4UC5LfshvqzHLS3RYGYWJSLpTmysS2lY0neQHW3lW2KTMMrDMh6wS94Q_N-5-TSafbi3Iv1j9VEgye3-GRZu6JeL_6YwN3pHMZXbOR6lqUCnzfcHBtMHRLbKSdu9tV_61kE4bqQKD0hFZxS0dJZmN8ALgcANfWOM8bUCe8MMfIFWkprUxKg8yHM5zXu-bNWcoMHeCzhf8WRpJuC3YsxPRGBTy9UMGzvJnv73eZ1HXZeDlWI-A9h36FnenFZlmsPOUVUPNhJpp5o1GVcqLtBf3rOzhc1wupLjJyFIGiaqYPpxliNQfkT3nAJ2_FxRSDBDyu8THVcCwVpONx7Zjw-ItFwDGaaeu0ukaZYnVxNLdnbwJEMWKCFwDLn1MiuWjXyKqMqXJOjTpE"}'
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
  response:
    status:
      code: 201
      message: Created
    headers:
      Server:
      - nginx
      Content-Type:
      - application/json
      Content-Length:
      - '914'
      Boulder-Request-Id:
      - t4ied2TSDfRTPLfBw0yqCEeTer2ny3-1Y-deugqvxhM
      Boulder-Requester:
      - '6221151'
      Link:
      - <https://acme-v01.api.letsencrypt.org/acme/new-authz>;rel="next"
      - <https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf>;rel="terms-of-service"
      Location:
      - https://acme-v01.api.letsencrypt.org/acme/reg/6221151
      Replay-Nonce:
      - vszalF2wceiKMdhOWj3D-Ry9nMTusShH_kdS89eq9_Q
      X-Frame-Options:
      - DENY
      Strict-Transport-Security:
      - max-age=604800
      Expires:
      - Tue, 15 Nov 2016 14:41:51 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Tue, 15 Nov 2016 14:41:51 GMT
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: |-
        {
          "id": 6221151,
          "key": {
            "kty": "RSA",
            "n": "uvsmFsfCGoXI-JRcqbjg9Uf7olKF_Sml08ZTjRKKT_2zcNTRuKwfsE8N6EJ-WdieSP2cc8XfILKQh214VNFJ3vLMopsG745vuybRy6HaftQ3KTD0Uqz0Gs-hgDdgTqwHd6CvbqjozeA-3lYrRRLkEmWA14KbqMlj7Qt0-fFhur2n2haRYENqh6H2mSWa75hP76MEpA3xXbVztCwWiTEKYWgsT__6FcqN9l1tQ3pEGL3W5M5Sj1kbq4Q8_iErmvlTdAGCUXCgeuDwepSBMiN1Gpg5aZ3a10PJHigUm58toRn4GltNvo2UxRZUOqJEuh02ZVj1EMd2ueSYvj8tyo9nGr-71q6SlzmvK3x595t5jXh9Et8oxdMYLGVwjoiWPjnY9NspzG2Rs9vuQ9uaP2m7FhXEOnoWdzANA6TMEk5D3FDfqvm-dDizox6Ai43zbNdankDJ1tlGWTmj1BobSapKu2aOyHpEKLe5uya3VWFlTqFw-HTW2jJhDd6-Q2M8q1vh65S5V-g8s603XKUoqSmUMYnD7QlgDbiP-jMumUIKuUtCj1Sz2sepJQ02F2doXh27UsR-m4xBopg5aeYR7x6bIjU3o5_w26xQlhwN01mcmVzYQmr22uZR6u4eH__s-k4SO3n4IXEY46BpLFYpMuVtnjv9jAnYESySs2T7npIgIQM",
            "e": "AQAB"
          },
          "contact": [
            "mailto:test@example.com"
          ],
          "initialIp": "213.123.191.198",
          "createdAt": "2016-11-15T14:41:51.277641087Z",
          "Status": ""
        }
    http_version: 
  recorded_at: Tue, 15 Nov 2016 14:41:53 GMT
- request:
    method: post
    uri: https://acme-v01.api.letsencrypt.org/acme/reg/6221151
    body:
      encoding: UTF-8
      string: '{"protected":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm5vbmNlIjoidnN6YWxGMndjZWlLTWRoT1dqM0QtUnk5bk1UdXNTaEhfa2RTODllcTlfUSIsImp3ayI6eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsIm4iOiJ1dnNtRnNmQ0dvWEktSlJjcWJqZzlVZjdvbEtGX1NtbDA4WlRqUktLVF8yemNOVFJ1S3dmc0U4TjZFSi1XZGllU1AyY2M4WGZJTEtRaDIxNFZORkozdkxNb3BzRzc0NXZ1eWJSeTZIYWZ0UTNLVEQwVXF6MEdzLWhnRGRnVHF3SGQ2Q3ZicWpvemVBLTNsWXJSUkxrRW1XQTE0S2JxTWxqN1F0MC1mRmh1cjJuMmhhUllFTnFoNkgybVNXYTc1aFA3Nk1FcEEzeFhiVnp0Q3dXaVRFS1lXZ3NUX182RmNxTjlsMXRRM3BFR0wzVzVNNVNqMWticTRROF9pRXJtdmxUZEFHQ1VYQ2dldUR3ZXBTQk1pTjFHcGc1YVozYTEwUEpIaWdVbTU4dG9SbjRHbHROdm8yVXhSWlVPcUpFdWgwMlpWajFFTWQydWVTWXZqOHR5bzluR3ItNzFxNlNsem12SzN4NTk1dDVqWGg5RXQ4b3hkTVlMR1Z3am9pV1Bqblk5TnNwekcyUnM5dnVROXVhUDJtN0ZoWEVPbm9XZHpBTkE2VE1FazVEM0ZEZnF2bS1kRGl6b3g2QWk0M3piTmRhbmtESjF0bEdXVG1qMUJvYlNhcEt1MmFPeUhwRUtMZTV1eWEzVldGbFRxRnctSFRXMmpKaERkNi1RMk04cTF2aDY1UzVWLWc4czYwM1hLVW9xU21VTVluRDdRbGdEYmlQLWpNdW1VSUt1VXRDajFTejJzZXBKUTAyRjJkb1hoMjdVc1ItbTR4Qm9wZzVhZVlSN3g2YklqVTNvNV93MjZ4UWxod04wMW1jbVZ6WVFtcjIydVpSNnU0ZUhfX3MtazRTTzNuNElYRVk0NkJwTEZZcE11VnRuanY5akFuWUVTeVNzMlQ3bnBJZ0lRTSJ9fQ","payload":"eyJyZXNvdXJjZSI6InJlZyIsImFncmVlbWVudCI6Imh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL2RvY3VtZW50cy9MRS1TQS12MS4xLjEtQXVndXN0LTEtMjAxNi5wZGYifQ","signature":"cbkJdYxO992xxhGJAMYubzl9-dAZHCcuBgm0G-_Urz7plFSummhzR-XnfmitZQpMLjXqtMRhdlSgD9l2V4NtAGHIwtyGRsCHImkpeKHLgHgfik5fUo-KxhuKO99lXcq5x60064n8E6F3sJqHeEZpzgKgXH7rMhsDf6XyPdQ2M2Qp_goSThWFRIvVPZKo_hXq9esms3oLAZ6z6sFHIyHgIJpM8k88kkVmy3PpsqSXkIK_n-Z9fXPCvcdfyS8QMxs9DhmLSPBfdnHQaTX79rZ3pTpFnJO-09PpNJ6IHhIJeT6GvndABW00eo_vdhNCZ72H1w146q8cum4hP6Sw-u9WH1nT9LTA_Hte7sOI6A4Km6OogAinDCwb8IW7K-nvzVNlI_rPSY0SWFCqxk9f-nY2Ubvcct64gDlK4Z9tVEFYF3m1CiLw7P8JUUl2-iv9u5NR8t1wgRldnXAqbtUVaaA8llX1povNLJAD44zXwV9SoSxqGu3vTXNyouQX3tGB_5A1s9iFyJmY7JynzVuEcunQibJotYiGOdnVSekVY1JlpRbZ4JyUvcaQhOs4eVDXfKDFNs5sqhUJXCCstXU9WU1Emt2ukXB_AWfWfp-zoicoaJRZKHvAXnqTtJ7R48cWWsGZwShulOU0uzGPpduw6F8P1pszgShRkGUTW90VtiyzPaQ"}'
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
  response:
    status:
      code: 202
      message: Accepted
    headers:
      Server:
      - nginx
      Content-Type:
      - application/json
      Content-Length:
      - '987'
      Boulder-Request-Id:
      - prHRvD5svPow5N6feO3EzDks_C74xV7DyJD-lIzZWZo
      Boulder-Requester:
      - '6221151'
      Link:
      - <https://acme-v01.api.letsencrypt.org/acme/new-authz>;rel="next"
      - <https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf>;rel="terms-of-service"
      Replay-Nonce:
      - _CvfLT_7WJoK01qwx2_dk_vAXNPcadb4sxQaLOG0s8k
      Expires:
      - Tue, 15 Nov 2016 14:41:54 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Tue, 15 Nov 2016 14:41:54 GMT
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: |-
        {
          "id": 6221151,
          "key": {
            "kty": "RSA",
            "n": "uvsmFsfCGoXI-JRcqbjg9Uf7olKF_Sml08ZTjRKKT_2zcNTRuKwfsE8N6EJ-WdieSP2cc8XfILKQh214VNFJ3vLMopsG745vuybRy6HaftQ3KTD0Uqz0Gs-hgDdgTqwHd6CvbqjozeA-3lYrRRLkEmWA14KbqMlj7Qt0-fFhur2n2haRYENqh6H2mSWa75hP76MEpA3xXbVztCwWiTEKYWgsT__6FcqN9l1tQ3pEGL3W5M5Sj1kbq4Q8_iErmvlTdAGCUXCgeuDwepSBMiN1Gpg5aZ3a10PJHigUm58toRn4GltNvo2UxRZUOqJEuh02ZVj1EMd2ueSYvj8tyo9nGr-71q6SlzmvK3x595t5jXh9Et8oxdMYLGVwjoiWPjnY9NspzG2Rs9vuQ9uaP2m7FhXEOnoWdzANA6TMEk5D3FDfqvm-dDizox6Ai43zbNdankDJ1tlGWTmj1BobSapKu2aOyHpEKLe5uya3VWFlTqFw-HTW2jJhDd6-Q2M8q1vh65S5V-g8s603XKUoqSmUMYnD7QlgDbiP-jMumUIKuUtCj1Sz2sepJQ02F2doXh27UsR-m4xBopg5aeYR7x6bIjU3o5_w26xQlhwN01mcmVzYQmr22uZR6u4eH__s-k4SO3n4IXEY46BpLFYpMuVtnjv9jAnYESySs2T7npIgIQM",
            "e": "AQAB"
          },
          "contact": [
            "mailto:test@example.com"
          ],
          "agreement": "https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf",
          "initialIp": "213.123.191.198",
          "createdAt": "2016-11-15T14:41:51Z",
          "Status": ""
        }
    http_version: 
  recorded_at: Tue, 15 Nov 2016 14:41:54 GMT
recorded_with: VCR 3.0.3


================================================
FILE: test/fixtures/vcr_cassettes/check-cloudflare-authentiation-failure.yml
================================================
---
http_interactions:
- request:
    method: get
    uri: https://api.cloudflare.com/client/v4/user
    body:
      encoding: US-ASCII
      string: ''
    headers:
      X-Auth-Email:
      - max@substrakt.com
      X-Auth-Key:
      - this-is-not-a-real-tokenb
      Content-Type:
      - application/json
  response:
    status:
      code: 400
      message: Bad Request
    headers:
      Date:
      - Tue, 29 Nov 2016 15:08:13 GMT
      Content-Type:
      - application/json
      Transfer-Encoding:
      - chunked
      Connection:
      - keep-alive
      Set-Cookie:
      - __cfduid=dc09026808ef50bffd20ee15ce87df3181480432093; expires=Wed, 29-Nov-17
        15:08:13 GMT; path=/; domain=.cloudflare.com; HttpOnly
      Expires:
      - Sun, 25 Jan 1981 05:00:00 GMT
      Cache-Control:
      - no-store, no-cache, must-revalidate, post-check=0, pre-check=0
      Pragma:
      - no-cache
      Strict-Transport-Security:
      - max-age=31536000
      X-Content-Type-Options:
      - nosniff
      X-Frame-Options:
      - SAMEORIGIN
      Server:
      - cloudflare-nginx
      Cf-Ray:
      - 3096f94a7ab53578-LHR
    body:
      encoding: UTF-8
      string: '{"success":false,"errors":[{"code":6003,"message":"Invalid request
        headers","error_chain":[{"code":6103,"message":"Invalid format for X-Auth-Key
        header"}]}],"messages":[],"result":null}'
    http_version: 
  recorded_at: Tue, 29 Nov 2016 15:08:14 GMT
recorded_with: VCR 3.0.3


================================================
FILE: test/fixtures/vcr_cassettes/check-cloudflare-authentiation-success.yml
================================================
---
http_interactions:
- request:
    method: get
    uri: https://api.cloudflare.com/client/v4/user
    body:
      encoding: US-ASCII
      string: ''
    headers:
      X-Auth-Email:
      - max@substrakt.com
      X-Auth-Key:
      - 856a0658ade46696ec3e165827d728382f989
      Content-Type:
      - application/json
  response:
    status:
      code: 200
      message: OK
    headers:
      Date:
      - Tue, 29 Nov 2016 15:07:22 GMT
      Content-Type:
      - application/json
      Transfer-Encoding:
      - chunked
      Connection:
      - keep-alive
      Set-Cookie:
      - __cfduid=d25906969eb0578ee329ca8ed02669d3f1480432042; expires=Wed, 29-Nov-17
        15:07:22 GMT; path=/; domain=.cloudflare.com; HttpOnly
      Expires:
      - Sun, 25 Jan 1981 05:00:00 GMT
      Cache-Control:
      - no-store, no-cache, must-revalidate, post-check=0, pre-check=0
      Pragma:
      - no-cache
      Strict-Transport-Security:
      - max-age=31536000
      X-Content-Type-Options:
      - nosniff
      X-Frame-Options:
      - SAMEORIGIN
      Server:
      - cloudflare-nginx
      Cf-Ray:
      - 3096f8078c5a35b4-LHR
    body:
      encoding: UTF-8
      string: '{"result":{"id":"ed0c2e827e608a93b65c429e503f5374","email":"max@substrakt.com","username":"1d1ea72d0ec1888c9c3dc35dd9ffa4ee","first_name":null,"last_name":null,"telephone":null,"country":null,"zipcode":null,"two_factor_authentication_enabled":false,"two_factor_authentication_locked":false,"created_on":"2016-02-11T15:28:34.019505Z","modified_on":"2016-09-06T12:46:08.721952Z","organizations":null,"has_pro_zones":false,"has_business_zones":false,"has_enterprise_zones":false},"success":true,"errors":[],"messages":[]}'
    http_version: 
  recorded_at: Tue, 29 Nov 2016 15:07:22 GMT
recorded_with: VCR 3.0.3


================================================
FILE: test/fixtures/vcr_cassettes/check-heroku-authentication-failure.yml
================================================
---
http_interactions:
- request:
    method: get
    uri: https://api.heroku.com/apps
    body:
      encoding: US-ASCII
      string: ''
    headers:
      Accept:
      - application/vnd.heroku+json; version=3
      Authorization:
      - Bearer this-is-not-a-real-token
      Content-Type:
      - application/json
  response:
    status:
      code: 401
      message: Unauthorized
    headers:
      Cache-Control:
      - private, no-cache
      Content-Type:
      - application/json
      Date:
      - Tue, 29 Nov 2016 14:59:27 GMT
      Request-Id:
      - 8159efa5-26dd-430c-6683-39993c6e3deb,9f74e1df-8d85-3cba-8187-2403d1b38964
      Vary:
      - Accept-Encoding
      Via:
      - 1.1 spaces-router (+291255b)
      X-Content-Type-Options:
      - nosniff
      X-Runtime:
      - '0.022004634'
      Content-Length:
      - '63'
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: '{"id":"unauthorized","message":"Invalid credentials provided."}'
    http_version: 
  recorded_at: Tue, 29 Nov 2016 14:59:27 GMT
recorded_with: VCR 3.0.3


================================================
FILE: test/fixtures/vcr_cassettes/check-heroku-authentication-succeed.yml
================================================
---
http_interactions:
- request:
    method: get
    uri: https://api.heroku.com/apps
    body:
      encoding: US-ASCII
      string: ''
    headers:
      Accept:
      - application/vnd.heroku+json; version=3
      Authorization:
      - Bearer 3c3b9d66-015a-4c91-bda2-14c79c88fb15
      Content-Type:
      - application/json
  response:
    status:
      code: 200
      message: OK
    headers:
      Accept-Ranges:
      - id, name, updated_at
      Cache-Control:
      - private, no-cache
      Content-Range:
      - name app-1..app-2
      Content-Type:
      - application/json
      Date:
      - Tue, 29 Nov 2016 14:57:34 GMT
      Etag:
      - '"929997e75d2782be47676c465897379e"'
      Last-Modified:
      - Tue, 29 Nov 2016 12:13:44 GMT
      Oauth-Scope:
      - global
      Oauth-Scope-Accepted:
      - global read read-protected write write-protected
      Ratelimit-Multiplier:
      - '1'
      Ratelimit-Remaining:
      - '4499'
      Request-Id:
      - 2e26469f-95f7-44b5-5b22-3d7503210e58,45780389-1416-e76c-c25d-9438fe7b587e
      Vary:
      - Accept-Encoding
      Via:
      - 1.1 spaces-router (+291255b)
      X-Content-Type-Options:
      - nosniff
      X-Runtime:
      - '0.1298948'
      Transfer-Encoding:
      - chunked
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: 'REDACTED'
    http_version:
  recorded_at: Tue, 29 Nov 2016 14:57:35 GMT
recorded_with: VCR 3.0.3


================================================
FILE: test/fixtures/vcr_cassettes/new-cert-provisioner-heroku-success.yml
================================================
---
http_interactions:
- request:
    method: head
    uri: https://acme-staging.api.letsencrypt.org/acme/new-reg
    body:
      encoding: US-ASCII
      string: ''
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept:
      - "*/*"
  response:
    status:
      code: 405
      message: Method Not Allowed
    headers:
      Server:
      - nginx
      Content-Type:
      - application/problem+json
      Content-Length:
      - '91'
      Allow:
      - POST
      Boulder-Request-Id:
      - DQYOe_uUWsYSeRnksCFWprTPAb50a8yvJitsDcBKR4I
      Replay-Nonce:
      - pfBlp0oHblH28U62W8vxW_LDIa_E8VZQhMZk1yRI7a0
      Expires:
      - Fri, 25 Nov 2016 19:43:48 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Fri, 25 Nov 2016 19:43:48 GMT
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: ''
    http_version: 
  recorded_at: Fri, 25 Nov 2016 19:43:48 GMT
- request:
    method: post
    uri: https://acme-staging.api.letsencrypt.org/acme/new-reg
    body:
      encoding: UTF-8
      string: '{"protected":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm5vbmNlIjoicGZCbHAwb0hibEgyOFU2Mlc4dnhXX0xESWFfRThWWlFoTVprMXlSSTdhMCIsImp3ayI6eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsIm4iOiJ1NTRZdWE1WV91N3lXMlZHS0drQVpjRW8yWGx5Sk9YdGVyR3dac01zRU54aG5oUUFSR0l5cFdkZkd4N0pyWll1Zm80NTNuZWFJWk1LY19DSDY4bXpmQVRQM0hUV2tjNE9hQ0hPaFN2TVh5bEdaMWJKelpnV0I5VEFUc3JZNjYxd1g3eEhteVNOVDYtamdYel9XY3dQVDU1b1pDY2M5QUgtT0FyUzhEdUo4NU0wNFpwWDZUaHBoS2x1QlRncUlMYnhjNVJydndCcFRHemw1VU5mUmhzd0xKbEZiMmdvQ0dsUFVERUhjSy1GQ2xIRmVubkRnU0VlWDRLaHdYdXgzazBLb3FXemxibURwWjc0X0trMFMwWC1zdmVqTUphMFExaThnSWJxQmRhZFlvaHo0aDhJV05SbW9za1BHXzNTWGRuLWZKOE53eHZwbzhFS04yNjEzdGhQd1JvMnlSQkR5YU5TcFBMNXJ0RllhTXM0SkgtdlFDNTNIUXoyTVlOb200dU92TkVWUFV1dTVvQXRna2NrOVNGcXc3djBza1pLdTQtZUlSZEFFZTFaQW5LQXRXYlE3M2p1T3RzekIyeE1Oc0ZiaVE1a1lGZVB5bzV1WlJKSEtXLVJycVJySmpCTFg5RVJZWEktQUI0aFpDOExRajlDY0hjZDgtNEt0QkdnYlJLX3pKR2paSENYdk9qeXRxcU9UZEwwM1lFZEVKZXFsZDA0dDYyeDU4dl9fZUYyMldNeS1ETUxhaTAxRElVSkFaX2hFN3JwOU1WOVQxdDQ5WUNIVElTYlhhaWM2YTF3YjZicFNsbDRUVHJTbHFpa0ZsY0w0VEh2MjkzZmxzR0drRzZGYXNqTFpiZUczUjRYTTlMYl9Ha0RkTXZMcThzQ3BLQ3NWaFlNVEhXTzk3ayJ9fQ","payload":"eyJyZXNvdXJjZSI6Im5ldy1yZWciLCJjb250YWN0IjpbIm1haWx0bzptYXhAc3Vic3RyYWt0LmNvbSJdfQ","signature":"J1BX8nxB_4sW8r1MsxDXhnR3N9RZmL4VhxfP6Jn5y-Jdcw6pV7JkXMLieKzNsVTbDMp6IY7G5doiQZHMZcDnh4EvbPOXomOySRfpxCzlMCJh-apQvJ4LJSqICyTJXSg-ONhuY7EUWT2Lbe4uTNiXQieTc1qpe06Y8u0HHSCAUtafrmX2zAWU8PCmpxp-YjUA4fYELKrNppsAiuo7riC5zpAFVL01FcmcqB4xK_q2Fe99pQZTq16am65UTCxB3dctgYNUej9IqKQGM4YA0UCLe-TC9tYbg18ya7kcA-r5KeTx-Sejb1MT7nfKgRfV58KukDe54h-T1N1DhnYWKE35FTLWud-hu6hiDspSZ0_aZphyMC72OsiDTzPeW8jZQHd22ToHCh5eFKD25UGzhIH1Kv4C82J5hzxjhjb90aiPFj0RHgUOkvvw_LuNtlkO-SV8U1rxi5fTS6WiUJpg0MlKJ48m1i6tCmmX9FDqsfWmC_ssFrIfFxu-L1qJbLk8pIfnXvYL5UUygFhG-Epeqp0P2dusKK8fl_t5n5w05j8Z8uQQ2ffJPF-aT0ypHmYqwvM4iRJeh6BKWKYeXT0URRpVXcoU91sNw_STy77gIFDv804462ikqmo2UZphCet2Ly9RZ92kdn6i61wG2grex2fhQ7Q6HQGdS23BJoMFvDNF8bY"}'
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
  response:
    status:
      code: 201
      message: Created
    headers:
      Server:
      - nginx
      Content-Type:
      - application/json
      Content-Length:
      - '912'
      Boulder-Request-Id:
      - tawKmVjk_laKcq84xhuNDX-7UfbJQbT6HPTeWxscfKM
      Boulder-Requester:
      - '515230'
      Link:
      - <https://acme-staging.api.letsencrypt.org/acme/new-authz>;rel="next"
      - <https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf>;rel="terms-of-service"
      Location:
      - https://acme-staging.api.letsencrypt.org/acme/reg/515230
      Replay-Nonce:
      - fN8QJN5a4maxLFEIKpaI5ZzSXJCbQB3-XDPyZjbwQRs
      X-Frame-Options:
      - DENY
      Strict-Transport-Security:
      - max-age=604800
      Expires:
      - Fri, 25 Nov 2016 19:43:49 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Fri, 25 Nov 2016 19:43:49 GMT
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: |-
        {
          "id": 515230,
          "key": {
            "kty": "RSA",
            "n": "u54Yua5Y_u7yW2VGKGkAZcEo2XlyJOXterGwZsMsENxhnhQARGIypWdfGx7JrZYufo453neaIZMKc_CH68mzfATP3HTWkc4OaCHOhSvMXylGZ1bJzZgWB9TATsrY661wX7xHmySNT6-jgXz_WcwPT55oZCcc9AH-OArS8DuJ85M04ZpX6ThphKluBTgqILbxc5RrvwBpTGzl5UNfRhswLJlFb2goCGlPUDEHcK-FClHFennDgSEeX4KhwXux3k0KoqWzlbmDpZ74_Kk0S0X-svejMJa0Q1i8gIbqBdadYohz4h8IWNRmoskPG_3SXdn-fJ8Nwxvpo8EKN2613thPwRo2yRBDyaNSpPL5rtFYaMs4JH-vQC53HQz2MYNom4uOvNEVPUuu5oAtgkck9SFqw7v0skZKu4-eIRdAEe1ZAnKAtWbQ73juOtszB2xMNsFbiQ5kYFePyo5uZRJHKW-RrqRrJjBLX9ERYXI-AB4hZC8LQj9CcHcd8-4KtBGgbRK_zJGjZHCXvOjytqqOTdL03YEdEJeqld04t62x58v__eF22WMy-DMLai01DIUJAZ_hE7rp9MV9T1t49YCHTISbXaic6a1wb6bpSll4TTrSlqikFlcL4THv293flsGGkG6FasjLZbeG3R4XM9Lb_GkDdMvLq8sCpKCsVhYMTHWO97k",
            "e": "AQAB"
          },
          "contact": [
            "mailto:max@substrakt.com"
          ],
          "initialIp": "82.43.101.135",
          "createdAt": "2016-11-25T19:43:49.349440381Z",
          "Status": ""
        }
    http_version: 
  recorded_at: Fri, 25 Nov 2016 19:43:49 GMT
- request:
    method: post
    uri: https://acme-staging.api.letsencrypt.org/acme/reg/515230
    body:
      encoding: UTF-8
      string: '{"protected":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm5vbmNlIjoiZk44UUpONWE0bWF4TEZFSUtwYUk1WnpTWEpDYlFCMy1YRFB5Wmpid1FScyIsImp3ayI6eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsIm4iOiJ1NTRZdWE1WV91N3lXMlZHS0drQVpjRW8yWGx5Sk9YdGVyR3dac01zRU54aG5oUUFSR0l5cFdkZkd4N0pyWll1Zm80NTNuZWFJWk1LY19DSDY4bXpmQVRQM0hUV2tjNE9hQ0hPaFN2TVh5bEdaMWJKelpnV0I5VEFUc3JZNjYxd1g3eEhteVNOVDYtamdYel9XY3dQVDU1b1pDY2M5QUgtT0FyUzhEdUo4NU0wNFpwWDZUaHBoS2x1QlRncUlMYnhjNVJydndCcFRHemw1VU5mUmhzd0xKbEZiMmdvQ0dsUFVERUhjSy1GQ2xIRmVubkRnU0VlWDRLaHdYdXgzazBLb3FXemxibURwWjc0X0trMFMwWC1zdmVqTUphMFExaThnSWJxQmRhZFlvaHo0aDhJV05SbW9za1BHXzNTWGRuLWZKOE53eHZwbzhFS04yNjEzdGhQd1JvMnlSQkR5YU5TcFBMNXJ0RllhTXM0SkgtdlFDNTNIUXoyTVlOb200dU92TkVWUFV1dTVvQXRna2NrOVNGcXc3djBza1pLdTQtZUlSZEFFZTFaQW5LQXRXYlE3M2p1T3RzekIyeE1Oc0ZiaVE1a1lGZVB5bzV1WlJKSEtXLVJycVJySmpCTFg5RVJZWEktQUI0aFpDOExRajlDY0hjZDgtNEt0QkdnYlJLX3pKR2paSENYdk9qeXRxcU9UZEwwM1lFZEVKZXFsZDA0dDYyeDU4dl9fZUYyMldNeS1ETUxhaTAxRElVSkFaX2hFN3JwOU1WOVQxdDQ5WUNIVElTYlhhaWM2YTF3YjZicFNsbDRUVHJTbHFpa0ZsY0w0VEh2MjkzZmxzR0drRzZGYXNqTFpiZUczUjRYTTlMYl9Ha0RkTXZMcThzQ3BLQ3NWaFlNVEhXTzk3ayJ9fQ","payload":"eyJyZXNvdXJjZSI6InJlZyIsImFncmVlbWVudCI6Imh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL2RvY3VtZW50cy9MRS1TQS12MS4xLjEtQXVndXN0LTEtMjAxNi5wZGYifQ","signature":"BYAgafAwJSu5711NO-f1pNkkCJmieHp2k7Oj2nIerFwjFD97vpDvcu9MTj_WZ9Q1YNreQ7mnlxyG1OV0oF4s968NYD89vaZEm9sTmPCQcaJRnwRmUPmvNznqd2aq_P9hRWKu1g3tptPOLmiQ6l05mEF9HtRNtiUNo9v3lObFr9vUm9yzlrEHZASxDMnb7bYDSfLQswR3EntL5lCklYCEceESXveneOgUcfAYvNj6OCMXrkaVkX-y7GIuUrDBWnadkrJd_Ewnnb8GBTdezclC8Vufb5bY-jEyMlHh7gWwQQbi-HYKHwZ24d1xS7Fyu_hMfNv8FB62t3TZkw0v_Qhcs2o9wrDlgrYPZ_ESMw9MfJSmKBzF4WwL6ETBfnEyUlmWLglePupSESWDakAUbEyFvhtVlEsCvJbaH52zEmxs2jvhsMwHIUw4PPeGebM0YKSAfC8zDEkCla28iE30OAKkeT1FbGUft6izDEi-BM_CCG2seRznsBsdf0KWGreamic7ixA7ugPhZASZ-w448LxnJeY7Y1AV8dORitKoD6VZ4PBSNaZCoRYSxaM7IZDfM9Ta7KyffAJh4iOSWNsdi558AsB4ToTlYit92J5wqqvRj5OaaONYDY_1NbVlI5dCh9PMjSprR3T0c_2Cgr0NrzlTf80EIA-hjV_uOECe2FfPAUU"}'
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
  response:
    status:
      code: 202
      message: Accepted
    headers:
      Server:
      - nginx
      Content-Type:
      - application/json
      Content-Length:
      - '985'
      Boulder-Request-Id:
      - PSu9181IU_ffF_oQ113fbrAHzUAWVG5kMZS5D72Zf64
      Boulder-Requester:
      - '515230'
      Link:
      - <https://acme-staging.api.letsencrypt.org/acme/new-authz>;rel="next"
      - <https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf>;rel="terms-of-service"
      Replay-Nonce:
      - OcUwF8GNHtAHzzyb9kUJlFy0vXNtO0sWhM9dDbrNpFE
      Expires:
      - Fri, 25 Nov 2016 19:43:49 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Fri, 25 Nov 2016 19:43:49 GMT
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: |-
        {
          "id": 515230,
          "key": {
            "kty": "RSA",
            "n": "u54Yua5Y_u7yW2VGKGkAZcEo2XlyJOXterGwZsMsENxhnhQARGIypWdfGx7JrZYufo453neaIZMKc_CH68mzfATP3HTWkc4OaCHOhSvMXylGZ1bJzZgWB9TATsrY661wX7xHmySNT6-jgXz_WcwPT55oZCcc9AH-OArS8DuJ85M04ZpX6ThphKluBTgqILbxc5RrvwBpTGzl5UNfRhswLJlFb2goCGlPUDEHcK-FClHFennDgSEeX4KhwXux3k0KoqWzlbmDpZ74_Kk0S0X-svejMJa0Q1i8gIbqBdadYohz4h8IWNRmoskPG_3SXdn-fJ8Nwxvpo8EKN2613thPwRo2yRBDyaNSpPL5rtFYaMs4JH-vQC53HQz2MYNom4uOvNEVPUuu5oAtgkck9SFqw7v0skZKu4-eIRdAEe1ZAnKAtWbQ73juOtszB2xMNsFbiQ5kYFePyo5uZRJHKW-RrqRrJjBLX9ERYXI-AB4hZC8LQj9CcHcd8-4KtBGgbRK_zJGjZHCXvOjytqqOTdL03YEdEJeqld04t62x58v__eF22WMy-DMLai01DIUJAZ_hE7rp9MV9T1t49YCHTISbXaic6a1wb6bpSll4TTrSlqikFlcL4THv293flsGGkG6FasjLZbeG3R4XM9Lb_GkDdMvLq8sCpKCsVhYMTHWO97k",
            "e": "AQAB"
          },
          "contact": [
            "mailto:max@substrakt.com"
          ],
          "agreement": "https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf",
          "initialIp": "82.43.101.135",
          "createdAt": "2016-11-25T19:43:49Z",
          "Status": ""
        }
    http_version: 
  recorded_at: Fri, 25 Nov 2016 19:43:50 GMT
- request:
    method: post
    uri: https://acme-staging.api.letsencrypt.org/acme/new-authz
    body:
      encoding: UTF-8
      string: '{"protected":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm5vbmNlIjoiT2NVd0Y4R05IdEFIenp5YjlrVUpsRnkwdlhOdE8wc1doTTlkRGJyTnBGRSIsImp3ayI6eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsIm4iOiJ1NTRZdWE1WV91N3lXMlZHS0drQVpjRW8yWGx5Sk9YdGVyR3dac01zRU54aG5oUUFSR0l5cFdkZkd4N0pyWll1Zm80NTNuZWFJWk1LY19DSDY4bXpmQVRQM0hUV2tjNE9hQ0hPaFN2TVh5bEdaMWJKelpnV0I5VEFUc3JZNjYxd1g3eEhteVNOVDYtamdYel9XY3dQVDU1b1pDY2M5QUgtT0FyUzhEdUo4NU0wNFpwWDZUaHBoS2x1QlRncUlMYnhjNVJydndCcFRHemw1VU5mUmhzd0xKbEZiMmdvQ0dsUFVERUhjSy1GQ2xIRmVubkRnU0VlWDRLaHdYdXgzazBLb3FXemxibURwWjc0X0trMFMwWC1zdmVqTUphMFExaThnSWJxQmRhZFlvaHo0aDhJV05SbW9za1BHXzNTWGRuLWZKOE53eHZwbzhFS04yNjEzdGhQd1JvMnlSQkR5YU5TcFBMNXJ0RllhTXM0SkgtdlFDNTNIUXoyTVlOb200dU92TkVWUFV1dTVvQXRna2NrOVNGcXc3djBza1pLdTQtZUlSZEFFZTFaQW5LQXRXYlE3M2p1T3RzekIyeE1Oc0ZiaVE1a1lGZVB5bzV1WlJKSEtXLVJycVJySmpCTFg5RVJZWEktQUI0aFpDOExRajlDY0hjZDgtNEt0QkdnYlJLX3pKR2paSENYdk9qeXRxcU9UZEwwM1lFZEVKZXFsZDA0dDYyeDU4dl9fZUYyMldNeS1ETUxhaTAxRElVSkFaX2hFN3JwOU1WOVQxdDQ5WUNIVElTYlhhaWM2YTF3YjZicFNsbDRUVHJTbHFpa0ZsY0w0VEh2MjkzZmxzR0drRzZGYXNqTFpiZUczUjRYTTlMYl9Ha0RkTXZMcThzQ3BLQ3NWaFlNVEhXTzk3ayJ9fQ","payload":"eyJyZXNvdXJjZSI6Im5ldy1hdXRoeiIsImlkZW50aWZpZXIiOnsidHlwZSI6ImRucyIsInZhbHVlIjoid3d3LnN1YnN0cmFrdC5jb20ifX0","signature":"oxpJVsNJDP2-xsCwVFdjVaCOub_Klk5viSSwFCgltRDWYsJizp7N1cR-6UJdDHuG2MjQHMX_T3fb1AwnprraUIuuhYVMjjUYAg2NVpCtIF3G8HObWMKBHYDd1AIDANwkdlrOzd00ssnMnt1YfEtws_F5j6OyIKZpCP5zbz-dclwBd1KdlDVU_Lb7yzQC7vmARVXUFq2TXHsKbs34vTcyUg1MR9v2-PGTFttJ1ruYkF6UGzGU3S27XWooc-1N5Geyk2lyiu3vd_VBy0fyTJTdmYu7Y9rFLzkDeVsjPin-0BEAXlL8Rd9yX6TMVHl-iw_1y_KanmOm6aNlTNlo4pE_kG9tP2iQaJyg3DuURWYIpFaM5XhMaFTVyFtJVuUCf-Wve286bhjdpJjfMlYBBliobZkGAFF7bocIRBYQwuqM_a0NVYMkuZC_R98EpXcxzZTG_L1PkIWHessrhRsSP4xJ2OnwY0nCTN-kS9xWODjugeOtDLMnm21vbyy-guQej8KHpiLYWkfwlHL-DJSh5McwzivPg0zU3gN71rPE2fF4czE2Fa3LxPfN8S0eAJIuNaS5lGDp9WiW7vuwHKH6VInBlfa_jeidvlRSXorCX1Iw70c3A-IIOEZT5PqNOyAPZtplBBOCyHv2IDF78jORaVm8wgZa9BK5BlBJ7ksHufG8euY"}'
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
  response:
    status:
      code: 201
      message: Created
    headers:
      Server:
      - nginx
      Content-Type:
      - application/json
      Content-Length:
      - '1011'
      Boulder-Request-Id:
      - Rh-KnlIB_3e_mn5Wytsna0iUIN9KxNz7qFNossRe9X0
      Boulder-Requester:
      - '515230'
      Link:
      - <https://acme-staging.api.letsencrypt.org/acme/new-cert>;rel="next"
      Location:
      - https://acme-staging.api.letsencrypt.org/acme/authz/9zcZviLntxFRNItDBZa8350l-Za7ezQaWkBKnrRSYEs
      Replay-Nonce:
      - VKs1pIokAwxCupqKFweucuAqDZ8SflFZAjpILnSphAE
      X-Frame-Options:
      - DENY
      Strict-Transport-Security:
      - max-age=604800
      Expires:
      - Fri, 25 Nov 2016 19:43:50 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Fri, 25 Nov 2016 19:43:50 GMT
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: |-
        {
          "identifier": {
            "type": "dns",
            "value": "www.substrakt.com"
          },
          "status": "pending",
          "expires": "2016-12-02T19:43:50.476963624Z",
          "challenges": [
            {
              "type": "tls-sni-01",
              "status": "pending",
              "uri": "https://acme-staging.api.letsencrypt.org/acme/challenge/9zcZviLntxFRNItDBZa8350l-Za7ezQaWkBKnrRSYEs/17255030",
              "token": "ZONyyOzF4msuy58Qab-wjEDx95ZA-ZpPD4thbv8YRjA"
            },
            {
              "type": "dns-01",
              "status": "pending",
              "uri": "https://acme-staging.api.letsencrypt.org/acme/challenge/9zcZviLntxFRNItDBZa8350l-Za7ezQaWkBKnrRSYEs/17255031",
              "token": "0gOAYLuO6t27BhDtN9br5Bb_OjwBYNsh4XWRihyJW5c"
            },
            {
              "type": "http-01",
              "status": "pending",
              "uri": "https://acme-staging.api.letsencrypt.org/acme/challenge/9zcZviLntxFRNItDBZa8350l-Za7ezQaWkBKnrRSYEs/17255032",
              "token": "RaRBalJkSDdziXHBPif1QC0oUze3OcWhMeDpZv0ecrA"
            }
          ],
          "combinations": [
            [
              2
            ],
            [
              1
            ],
            [
              0
            ]
          ]
        }
    http_version: 
  recorded_at: Fri, 25 Nov 2016 19:43:50 GMT
- request:
    method: post
    uri: https://acme-staging.api.letsencrypt.org/acme/new-authz
    body:
      encoding: UTF-8
      string: '{"protected":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm5vbmNlIjoiVktzMXBJb2tBd3hDdXBxS0Z3ZXVjdUFxRFo4U2ZsRlpBanBJTG5TcGhBRSIsImp3ayI6eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsIm4iOiJ1NTRZdWE1WV91N3lXMlZHS0drQVpjRW8yWGx5Sk9YdGVyR3dac01zRU54aG5oUUFSR0l5cFdkZkd4N0pyWll1Zm80NTNuZWFJWk1LY19DSDY4bXpmQVRQM0hUV2tjNE9hQ0hPaFN2TVh5bEdaMWJKelpnV0I5VEFUc3JZNjYxd1g3eEhteVNOVDYtamdYel9XY3dQVDU1b1pDY2M5QUgtT0FyUzhEdUo4NU0wNFpwWDZUaHBoS2x1QlRncUlMYnhjNVJydndCcFRHemw1VU5mUmhzd0xKbEZiMmdvQ0dsUFVERUhjSy1GQ2xIRmVubkRnU0VlWDRLaHdYdXgzazBLb3FXemxibURwWjc0X0trMFMwWC1zdmVqTUphMFExaThnSWJxQmRhZFlvaHo0aDhJV05SbW9za1BHXzNTWGRuLWZKOE53eHZwbzhFS04yNjEzdGhQd1JvMnlSQkR5YU5TcFBMNXJ0RllhTXM0SkgtdlFDNTNIUXoyTVlOb200dU92TkVWUFV1dTVvQXRna2NrOVNGcXc3djBza1pLdTQtZUlSZEFFZTFaQW5LQXRXYlE3M2p1T3RzekIyeE1Oc0ZiaVE1a1lGZVB5bzV1WlJKSEtXLVJycVJySmpCTFg5RVJZWEktQUI0aFpDOExRajlDY0hjZDgtNEt0QkdnYlJLX3pKR2paSENYdk9qeXRxcU9UZEwwM1lFZEVKZXFsZDA0dDYyeDU4dl9fZUYyMldNeS1ETUxhaTAxRElVSkFaX2hFN3JwOU1WOVQxdDQ5WUNIVElTYlhhaWM2YTF3YjZicFNsbDRUVHJTbHFpa0ZsY0w0VEh2MjkzZmxzR0drRzZGYXNqTFpiZUczUjRYTTlMYl9Ha0RkTXZMcThzQ3BLQ3NWaFlNVEhXTzk3ayJ9fQ","payload":"eyJyZXNvdXJjZSI6Im5ldy1hdXRoeiIsImlkZW50aWZpZXIiOnsidHlwZSI6ImRucyIsInZhbHVlIjoic3Vic3RyYWt0LmNvbSJ9fQ","signature":"EmhVqxSSMXqiIv_VfnLXqb0ReEnT2Yh2vHiQXQ16wjeV6pOJ2UYuCHXjuIv9ZVDKxz5g34y-wQkabyYmkkBFSAdNCcn5WL4Le-Yfdx-siJWR303KIbf2piQjjmLyv9szgNpSpYo4Sw1SM_FLnamP-F4WK_LyTLQc8K93qRdD-RDcKAjpGsPQGY7BynBeXENsSo3egjVQ1ImS8bOIOJA17OBwKreoJn4pWn8MtoicrHfgLDqUCTsUnSqG_DZxp37LGoUt7duVTEw_aRdnFPkPahz7kmYnhr4pEXthiShLe24DD_yYg3Xh8muctbJLEXL0vgAzVBMeQ7Wh6NswicY1WWXzZPyBp3EYQb8QNwalvVf0wvMGkr-gf5FXvo398ByYAckjLbwDtestO5bCM3tfejKgRSOa0Ey9PAiuyeJg1pLH2cspUI0as7_Mglw1fmV_cnZP2l8SdGWJGKJ-Yb9b5Hyk5l3rk_Kd8xa5d3TJc_r2Jq5uIX6aSKbxIWGhv_Ow3BFjD32QV444ipcvDF0JFDbnhn_nbbi5sQnlVEmotuZKDbvJmF3Oj-vNFORzZ8SKwor240nyVXD9YXukN3ou8FZ3kXKKvl9xMf2gFOSfpvN-J4SJiQYO1y5mtmuu7YSCZGsvAR0cY73f9Bcd8NdEAgn9nZhjM9AivGXHVJTH-Qo"}'
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
  response:
    status:
      code: 201
      message: Created
    headers:
      Server:
      - nginx
      Content-Type:
      - application/json
      Content-Length:
      - '1007'
      Boulder-Request-Id:
      - enkNdnaIUtRBgXG51-yyesmu-havJoqf28_kZEqJQcU
      Boulder-Requester:
      - '515230'
      Link:
      - <https://acme-staging.api.letsencrypt.org/acme/new-cert>;rel="next"
      Location:
      - https://acme-staging.api.letsencrypt.org/acme/authz/AUg9phkJKzkrHFEigYPzA8M3w9HSesInZU4eYXBxN4k
      Replay-Nonce:
      - JAp97kFgm6jfygatsgUMJXljUu0pTYYeJKsi8c66qfY
      X-Frame-Options:
      - DENY
      Strict-Transport-Security:
      - max-age=604800
      Expires:
      - Fri, 25 Nov 2016 19:43:51 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Fri, 25 Nov 2016 19:43:51 GMT
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: |-
        {
          "identifier": {
            "type": "dns",
            "value": "substrakt.com"
          },
          "status": "pending",
          "expires": "2016-12-02T19:43:51.016716778Z",
          "challenges": [
            {
              "type": "http-01",
              "status": "pending",
              "uri": "https://acme-staging.api.letsencrypt.org/acme/challenge/AUg9phkJKzkrHFEigYPzA8M3w9HSesInZU4eYXBxN4k/17255033",
              "token": "YBmLYlZqG8L9IcRoCVFLUClsmtnMzYYlCRxGrIdQl0Y"
            },
            {
              "type": "dns-01",
              "status": "pending",
              "uri": "https://acme-staging.api.letsencrypt.org/acme/challenge/AUg9phkJKzkrHFEigYPzA8M3w9HSesInZU4eYXBxN4k/17255034",
              "token": "hkVutrAaDw_YZWlH6Rktn4qvZqPNpzw1X6IbPW-FOss"
            },
            {
              "type": "tls-sni-01",
              "status": "pending",
              "uri": "https://acme-staging.api.letsencrypt.org/acme/challenge/AUg9phkJKzkrHFEigYPzA8M3w9HSesInZU4eYXBxN4k/17255035",
              "token": "DREv0Ub7G98RJ8LV0O1pcKj3N7GiPyUWE_8UrMmJ4Fo"
            }
          ],
          "combinations": [
            [
              1
            ],
            [
              0
            ],
            [
              2
            ]
          ]
        }
    http_version: 
  recorded_at: Fri, 25 Nov 2016 19:43:51 GMT
- request:
    method: post
    uri: https://www.cloudflare.com/api_json.html
    body:
      encoding: US-ASCII
      string: a=rec_new&z=substrakt.com&type=TXT&name=_acme-challenge.www.substrakt.com&content=u-ByBNjjCHeiSnMLtb5MIP9DMClhHQpoqaLyxpsifeI&ttl=1&service_mode=1&tkn=49029fecd405689687af84b77176e344c8259&u=max%40substrakt.com
    headers:
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
      User-Agent:
      - Ruby
      Content-Type:
      - application/x-www-form-urlencoded
  response:
    status:
      code: 200
      message: OK
    headers:
      Date:
      - Fri, 25 Nov 2016 19:43:52 GMT
      Content-Type:
      - application/json
      Transfer-Encoding:
      - chunked
      Connection:
      - keep-alive
      Set-Cookie:
      - CF_UALE=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0
      - __cfduid=df4833e848f88cda9727d42073c63ca1c1480103031; expires=Sat, 25-Nov-17
        19:43:51 GMT; path=/; domain=.cloudflare.com; HttpOnly
      - vses2=t1r5g9a1hkah0h8qupskhiai15; path=/; domain=www.cloudflare.com; secure;
        HttpOnly
      Expires:
      - Thu, 19 Nov 1981 08:52:00 GMT
      Cache-Control:
      - no-store, no-cache, must-revalidate, post-check=0, pre-check=0
      Pragma:
      - no-cache
      Strict-Transport-Security:
      - max-age=31536000
      X-Content-Type-Options:
      - nosniff
      X-Frame-Options:
      - SAMEORIGIN
      Content-Security-Policy:
      - default-src 'self' https://*; script-src 'self' 'unsafe-inline' 'unsafe-eval'
        https://* data:; img-src 'self' https://* data:; style-src 'self' 'unsafe-inline'
        https://*; font-src 'self' https://* data:; frame-src https://*; connect-src
        'self' https://* wss://*.zopim.com data:;
      X-Xss-Protection:
      - 1; mode=block
      Server:
      - cloudflare-nginx
      Cf-Ray:
      - 3077978a4830350c-LHR
    body:
      encoding: ASCII-8BIT
      string: '{"request":{"act":"rec_new"},"response":{"rec":{"obj":{"rec_id":"669364345","rec_hash":"e619789f14ceac02390543d9ab7b269a","zone_name":"substrakt.com","name":"_acme-challenge.www.substrakt.com","display_name":"_acme-challenge.www","type":"TXT","prio":null,"content":"u-ByBNjjCHeiSnMLtb5MIP9DMClhHQpoqaLyxpsifeI","display_content":"u-ByBNjjCHeiSnMLtb5MIP9DMClhHQpoqaLyxpsifeI","ttl":"1","ttl_ceil":86400,"ssl_id":"5084311","ssl_status":"V","ssl_expires_on":null,"auto_ttl":1,"service_mode":"0","props":{"proxiable":0,"cloud_on":0,"cf_open":1,"vanity_lock":0,"ssl":1,"expired_ssl":0,"expiring_ssl":0,"pending_ssl":0}}}},"result":"success","msg":null}'
    http_version: 
  recorded_at: Fri, 25 Nov 2016 19:43:52 GMT
- request:
    method: post
    uri: https://www.cloudflare.com/api_json.html
    body:
      encoding: US-ASCII
      string: a=rec_new&z=substrakt.com&type=TXT&name=_acme-challenge.substrakt.com&content=nqFjZVsylspPNT7TzFvoLvIf_yzkbVF9cXKvv-qpftU&ttl=1&service_mode=1&tkn=49029fecd405689687af84b77176e344c8259&u=max%40substrakt.com
    headers:
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
      User-Agent:
      - Ruby
      Content-Type:
      - application/x-www-form-urlencoded
  response:
    status:
      code: 200
      message: OK
    headers:
      Date:
      - Fri, 25 Nov 2016 19:43:52 GMT
      Content-Type:
      - application/json
      Transfer-Encoding:
      - chunked
      Connection:
      - keep-alive
      Set-Cookie:
      - CF_UALE=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0
      - __cfduid=dfdeebab913a45a61209e50a2cc2b5c491480103032; expires=Sat, 25-Nov-17
        19:43:52 GMT; path=/; domain=.cloudflare.com; HttpOnly
      - vses2=b3a5vv58unqpbfm3cqvl2u1l41; path=/; domain=www.cloudflare.com; secure;
        HttpOnly
      Expires:
      - Thu, 19 Nov 1981 08:52:00 GMT
      Cache-Control:
      - no-store, no-cache, must-revalidate, post-check=0, pre-check=0
      Pragma:
      - no-cache
      Strict-Transport-Security:
      - max-age=31536000
      X-Content-Type-Options:
      - nosniff
      X-Frame-Options:
      - SAMEORIGIN
      Content-Security-Policy:
      - default-src 'self' https://*; script-src 'self' 'unsafe-inline' 'unsafe-eval'
        https://* data:; img-src 'self' https://* data:; style-src 'self' 'unsafe-inline'
        https://*; font-src 'self' https://* data:; frame-src https://*; connect-src
        'self' https://* wss://*.zopim.com data:;
      X-Xss-Protection:
      - 1; mode=block
      Server:
      - cloudflare-nginx
      Cf-Ray:
      - 3077978fcca206e8-LHR
    body:
      encoding: ASCII-8BIT
      string: '{"request":{"act":"rec_new"},"response":{"rec":{"obj":{"rec_id":"669364348","rec_hash":"21acc6f2c111419a962b2669b98c4663","zone_name":"substrakt.com","name":"_acme-challenge.substrakt.com","display_name":"_acme-challenge","type":"TXT","prio":null,"content":"nqFjZVsylspPNT7TzFvoLvIf_yzkbVF9cXKvv-qpftU","display_content":"nqFjZVsylspPNT7TzFvoLvIf_yzkbVF9cXKvv-qpftU","ttl":"1","ttl_ceil":86400,"ssl_id":"5084311","ssl_status":"V","ssl_expires_on":null,"auto_ttl":1,"service_mode":"0","props":{"proxiable":0,"cloud_on":0,"cf_open":1,"vanity_lock":0,"ssl":1,"expired_ssl":0,"expiring_ssl":0,"pending_ssl":0}}}},"result":"success","msg":null}'
    http_version: 
  recorded_at: Fri, 25 Nov 2016 19:43:52 GMT
- request:
    method: post
    uri: https://acme-staging.api.letsencrypt.org/acme/challenge/9zcZviLntxFRNItDBZa8350l-Za7ezQaWkBKnrRSYEs/17255031
    body:
      encoding: UTF-8
      string: '{"protected":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm5vbmNlIjoiSkFwOTdrRmdtNmpmeWdhdHNnVU1KWGxqVXUwcFRZWWVKS3NpOGM2NnFmWSIsImp3ayI6eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsIm4iOiJ1NTRZdWE1WV91N3lXMlZHS0drQVpjRW8yWGx5Sk9YdGVyR3dac01zRU54aG5oUUFSR0l5cFdkZkd4N0pyWll1Zm80NTNuZWFJWk1LY19DSDY4bXpmQVRQM0hUV2tjNE9hQ0hPaFN2TVh5bEdaMWJKelpnV0I5VEFUc3JZNjYxd1g3eEhteVNOVDYtamdYel9XY3dQVDU1b1pDY2M5QUgtT0FyUzhEdUo4NU0wNFpwWDZUaHBoS2x1QlRncUlMYnhjNVJydndCcFRHemw1VU5mUmhzd0xKbEZiMmdvQ0dsUFVERUhjSy1GQ2xIRmVubkRnU0VlWDRLaHdYdXgzazBLb3FXemxibURwWjc0X0trMFMwWC1zdmVqTUphMFExaThnSWJxQmRhZFlvaHo0aDhJV05SbW9za1BHXzNTWGRuLWZKOE53eHZwbzhFS04yNjEzdGhQd1JvMnlSQkR5YU5TcFBMNXJ0RllhTXM0SkgtdlFDNTNIUXoyTVlOb200dU92TkVWUFV1dTVvQXRna2NrOVNGcXc3djBza1pLdTQtZUlSZEFFZTFaQW5LQXRXYlE3M2p1T3RzekIyeE1Oc0ZiaVE1a1lGZVB5bzV1WlJKSEtXLVJycVJySmpCTFg5RVJZWEktQUI0aFpDOExRajlDY0hjZDgtNEt0QkdnYlJLX3pKR2paSENYdk9qeXRxcU9UZEwwM1lFZEVKZXFsZDA0dDYyeDU4dl9fZUYyMldNeS1ETUxhaTAxRElVSkFaX2hFN3JwOU1WOVQxdDQ5WUNIVElTYlhhaWM2YTF3YjZicFNsbDRUVHJTbHFpa0ZsY0w0VEh2MjkzZmxzR0drRzZGYXNqTFpiZUczUjRYTTlMYl9Ha0RkTXZMcThzQ3BLQ3NWaFlNVEhXTzk3ayJ9fQ","payload":"eyJyZXNvdXJjZSI6ImNoYWxsZW5nZSIsInR5cGUiOiJkbnMtMDEiLCJrZXlBdXRob3JpemF0aW9uIjoiMGdPQVlMdU82dDI3QmhEdE45YnI1QmJfT2p3QllOc2g0WFdSaWh5Slc1Yy5CSGgycURuOEg4c0EyTUZnMUVxc0JIR3R0NnZZNzJJX3VkQTVJNlg3Yk93In0","signature":"E3K9RUArWnEWOl3LbSFgWhlU21Y--8FaGsTVAZ3aoMd8GTE1TQyawJHVupO2exRqRZOxLcM2J-UHsNFIFx4QSpy8cHBD9DGJjmp_UjNN77n59Zt-PvUa5nMBN-8JJyOH0UZYeag0eZRhhrlYENGTweTJH1HqlRRPFzANSfKjCAIsWydjMjD8VG_zRRWfv8Z5MEUUcQHmHIpejfKqIVuTBCmmRVlDbO5VWChCL7xJ3g0uIffgFFACIs_z0SxMPjQvahJ7m9BMNdY-UDLbBVfVJxomfiwpXCzxHMw9voCMiVb1mwG9p1woH6HrprANdO7D90g_fr3NvmY78rtQAMbNJM9gnFfN8JS3Ir81aF6c2CIcqAIDsFICpnvQq2ubnicyYyYcBYiIx_lP5EDnJG_PLSgGLoIEen1mf7T2hAK82qda9Dh-cE2miBAD7csBvAI3WjKl85c_2UaX9u7k97518RyHtvWt6YYuXtZN6tT919iEeV1bt6ODrekeldjbwY-hkeYp-eXBMDib9lRgNlvBuQn9Q-nQIAYS9XTAZ7KKya5sctcG91Bc4hzfwMELbkPxPcM6QdsLq74UC2B72P7maq3M3_v4kPrVLIrkbE05fAUSL5OhiMOUWByizqVnf4blqxJsFUqh_K6cAXOGHzEs2Aimts87xV9vcFG2vq7D7og"}'
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
  response:
    status:
      code: 202
      message: Accepted
    headers:
      Server:
      - nginx
      Content-Type:
      - application/json
      Content-Length:
      - '337'
      Boulder-Request-Id:
      - vQyS7Qh2mySxzOiAmsZ6zddUWvEr5aoL9q3agTZLZ1w
      Boulder-Requester:
      - '515230'
      Link:
      - <https://acme-staging.api.letsencrypt.org/acme/authz/9zcZviLntxFRNItDBZa8350l-Za7ezQaWkBKnrRSYEs>;rel="up"
      Location:
      - https://acme-staging.api.letsencrypt.org/acme/challenge/9zcZviLntxFRNItDBZa8350l-Za7ezQaWkBKnrRSYEs/17255031
      Replay-Nonce:
      - OqhPKVOw7GQVb-hklD6ifrH7-ALwXq0hG3PEX4rJaKM
      Expires:
      - Fri, 25 Nov 2016 19:44:53 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Fri, 25 Nov 2016 19:44:53 GMT
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: |-
        {
          "type": "dns-01",
          "status": "pending",
          "uri": "https://acme-staging.api.letsencrypt.org/acme/challenge/9zcZviLntxFRNItDBZa8350l-Za7ezQaWkBKnrRSYEs/17255031",
          "token": "0gOAYLuO6t27BhDtN9br5Bb_OjwBYNsh4XWRihyJW5c",
          "keyAuthorization": "0gOAYLuO6t27BhDtN9br5Bb_OjwBYNsh4XWRihyJW5c.BHh2qDn8H8sA2MFg1EqsBHGtt6vY72I_udA5I6X7bOw"
        }
    http_version: 
  recorded_at: Fri, 25 Nov 2016 19:44:53 GMT
- request:
    method: post
    uri: https://acme-staging.api.letsencrypt.org/acme/challenge/AUg9phkJKzkrHFEigYPzA8M3w9HSesInZU4eYXBxN4k/17255034
    body:
      encoding: UTF-8
      string: '{"protected":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm5vbmNlIjoiT3FoUEtWT3c3R1FWYi1oa2xENmlmckg3LUFMd1hxMGhHM1BFWDRySmFLTSIsImp3ayI6eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsIm4iOiJ1NTRZdWE1WV91N3lXMlZHS0drQVpjRW8yWGx5Sk9YdGVyR3dac01zRU54aG5oUUFSR0l5cFdkZkd4N0pyWll1Zm80NTNuZWFJWk1LY19DSDY4bXpmQVRQM0hUV2tjNE9hQ0hPaFN2TVh5bEdaMWJKelpnV0I5VEFUc3JZNjYxd1g3eEhteVNOVDYtamdYel9XY3dQVDU1b1pDY2M5QUgtT0FyUzhEdUo4NU0wNFpwWDZUaHBoS2x1QlRncUlMYnhjNVJydndCcFRHemw1VU5mUmhzd0xKbEZiMmdvQ0dsUFVERUhjSy1GQ2xIRmVubkRnU0VlWDRLaHdYdXgzazBLb3FXemxibURwWjc0X0trMFMwWC1zdmVqTUphMFExaThnSWJxQmRhZFlvaHo0aDhJV05SbW9za1BHXzNTWGRuLWZKOE53eHZwbzhFS04yNjEzdGhQd1JvMnlSQkR5YU5TcFBMNXJ0RllhTXM0SkgtdlFDNTNIUXoyTVlOb200dU92TkVWUFV1dTVvQXRna2NrOVNGcXc3djBza1pLdTQtZUlSZEFFZTFaQW5LQXRXYlE3M2p1T3RzekIyeE1Oc0ZiaVE1a1lGZVB5bzV1WlJKSEtXLVJycVJySmpCTFg5RVJZWEktQUI0aFpDOExRajlDY0hjZDgtNEt0QkdnYlJLX3pKR2paSENYdk9qeXRxcU9UZEwwM1lFZEVKZXFsZDA0dDYyeDU4dl9fZUYyMldNeS1ETUxhaTAxRElVSkFaX2hFN3JwOU1WOVQxdDQ5WUNIVElTYlhhaWM2YTF3YjZicFNsbDRUVHJTbHFpa0ZsY0w0VEh2MjkzZmxzR0drRzZGYXNqTFpiZUczUjRYTTlMYl9Ha0RkTXZMcThzQ3BLQ3NWaFlNVEhXTzk3ayJ9fQ","payload":"eyJyZXNvdXJjZSI6ImNoYWxsZW5nZSIsInR5cGUiOiJkbnMtMDEiLCJrZXlBdXRob3JpemF0aW9uIjoiaGtWdXRyQWFEd19ZWldsSDZSa3RuNHF2WnFQTnB6dzFYNkliUFctRk9zcy5CSGgycURuOEg4c0EyTUZnMUVxc0JIR3R0NnZZNzJJX3VkQTVJNlg3Yk93In0","signature":"nSSLTifvv3Jwtc_Unqk4fFmUznn4KKkkTLek80amdiVfWNEbDhZClNsEH2OB4xJ23m3uH3eHc2GfawKcAUvRet4CCq-k3JPNYOhDnEi2_gmfzd4vcXSMQ1cP54RSZgYwptvMmPxVJua5dg0yHFsciTBWrHsKTgfxsYL_i6ry2Ch-dXaF2sa63kkiRHGapV5PWgYiRNHVrcF1xWgs9zxZl76AWWRNRY5_YPP8b4XgrkgqEDcWIksdnHDKlTOvSTnkx7kCvpRMVFfF3_bIewNsa1Y1H0tLzYaXcdOUXyRycfp-JTJySfVb-Y7oF9iQ9Rcz5-ayNw5WOuay5TDJxGUQyEcJcuQA584iRJFA3DVwuwh7Z0a64VKbKb6Ywz67D8JWcUmWomHU8ah_CoVSjmFvxPrHkUCR_rUYy2Y4YWu0ItSCACr8bazh29IH8Rf7H_8fgjwl4s1k75cVrZKlFGGnq_3Yk7R4Fg0uvPLFe5wt41x-ApRAeGomyEP9_e17aOR87b1CQ5aaWkhR5419NYr46UgdGQJQn73wDNaUFi92mJh1wdFVPXftcXw3GctvuX22acjDoQQrAxnadEITc-WXW_We6H4FG9fE1Ok6oJ7-n0mLxruMgj-Xd63Xod9kbLxM0ZPWYOMmtTjPk18gKBw-DFxNTPngyLklk-8OJOp8fPE"}'
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
  response:
    status:
      code: 202
      message: Accepted
    headers:
      Server:
      - nginx
      Content-Type:
      - application/json
      Content-Length:
      - '337'
      Boulder-Request-Id:
      - "-WawGxKmafs_u3_vVGkVyfpuEGZfU0NbOKjyoQVZOiY"
      Boulder-Requester:
      - '515230'
      Link:
      - <https://acme-staging.api.letsencrypt.org/acme/authz/AUg9phkJKzkrHFEigYPzA8M3w9HSesInZU4eYXBxN4k>;rel="up"
      Location:
      - https://acme-staging.api.letsencrypt.org/acme/challenge/AUg9phkJKzkrHFEigYPzA8M3w9HSesInZU4eYXBxN4k/17255034
      Replay-Nonce:
      - TPtoS-qXabiURBVYI1LA4fo_kSk0XL9Ct8OGuc7WeiQ
      Expires:
      - Fri, 25 Nov 2016 19:44:53 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Fri, 25 Nov 2016 19:44:53 GMT
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: |-
        {
          "type": "dns-01",
          "status": "pending",
          "uri": "https://acme-staging.api.letsencrypt.org/acme/challenge/AUg9phkJKzkrHFEigYPzA8M3w9HSesInZU4eYXBxN4k/17255034",
          "token": "hkVutrAaDw_YZWlH6Rktn4qvZqPNpzw1X6IbPW-FOss",
          "keyAuthorization": "hkVutrAaDw_YZWlH6Rktn4qvZqPNpzw1X6IbPW-FOss.BHh2qDn8H8sA2MFg1EqsBHGtt6vY72I_udA5I6X7bOw"
        }
    http_version: 
  recorded_at: Fri, 25 Nov 2016 19:44:53 GMT
- request:
    method: post
    uri: https://acme-staging.api.letsencrypt.org/acme/new-cert
    body:
      encoding: UTF-8
      string: '{"protected":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm5vbmNlIjoiVFB0b1MtcVhhYmlVUkJWWUkxTEE0Zm9fa1NrMFhMOUN0OE9HdWM3V2VpUSIsImp3ayI6eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsIm4iOiJ1NTRZdWE1WV91N3lXMlZHS0drQVpjRW8yWGx5Sk9YdGVyR3dac01zRU54aG5oUUFSR0l5cFdkZkd4N0pyWll1Zm80NTNuZWFJWk1LY19DSDY4bXpmQVRQM0hUV2tjNE9hQ0hPaFN2TVh5bEdaMWJKelpnV0I5VEFUc3JZNjYxd1g3eEhteVNOVDYtamdYel9XY3dQVDU1b1pDY2M5QUgtT0FyUzhEdUo4NU0wNFpwWDZUaHBoS2x1QlRncUlMYnhjNVJydndCcFRHemw1VU5mUmhzd0xKbEZiMmdvQ0dsUFVERUhjSy1GQ2xIRmVubkRnU0VlWDRLaHdYdXgzazBLb3FXemxibURwWjc0X0trMFMwWC1zdmVqTUphMFExaThnSWJxQmRhZFlvaHo0aDhJV05SbW9za1BHXzNTWGRuLWZKOE53eHZwbzhFS04yNjEzdGhQd1JvMnlSQkR5YU5TcFBMNXJ0RllhTXM0SkgtdlFDNTNIUXoyTVlOb200dU92TkVWUFV1dTVvQXRna2NrOVNGcXc3djBza1pLdTQtZUlSZEFFZTFaQW5LQXRXYlE3M2p1T3RzekIyeE1Oc0ZiaVE1a1lGZVB5bzV1WlJKSEtXLVJycVJySmpCTFg5RVJZWEktQUI0aFpDOExRajlDY0hjZDgtNEt0QkdnYlJLX3pKR2paSENYdk9qeXRxcU9UZEwwM1lFZEVKZXFsZDA0dDYyeDU4dl9fZUYyMldNeS1ETUxhaTAxRElVSkFaX2hFN3JwOU1WOVQxdDQ5WUNIVElTYlhhaWM2YTF3YjZicFNsbDRUVHJTbHFpa0ZsY0w0VEh2MjkzZmxzR0drRzZGYXNqTFpiZUczUjRYTTlMYl9Ha0RkTXZMcThzQ3BLQ3NWaFlNVEhXTzk3ayJ9fQ","payload":"eyJyZXNvdXJjZSI6Im5ldy1jZXJ0IiwiY3NyIjoiTUlJQ256Q0NBWWNDQVFJd0hERWFNQmdHQTFVRUF3d1JkM2QzTG5OMVluTjBjbUZyZEM1amIyMHdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFEQ3JxVU8tTDB2UktVcGhETW9nNF8yMVhSVEowSURVN0JTMmZCcTN2a2llejlQOEd1R2JQMVVvOV9TMkU0ZU5LSXFIWWxVNmN3MWRiT3hvVHRYaWlfVTY4QVZZRmJoWnRwS0tiZU5BZkE0OUlyaV9HS2tkOFEwMHZlSl81enFsWnZqRkx2eHBkUmRQQldrVHR3MHpjU2dJWkQydW51RDNEdzVLcWY5RnpYVUE4X0o5N1FLUks5d1IyOV9YSy0wT1BlaWJabGUtSUdBa2xZam80UklMN1VueENEaGRYVWJ2YUI3U2lBeEF1aVdld0tQSkl3WHM0UW9LTnAwNU9kdFFIeV9wN0xWaDNsN01EcXhKY0d2cXdBbjE1WlhjWWc3aW5lTDJPVWdyMk1SVEpSbUdYeWhtdnVsR29aNE5VTy1nUlEtQ1FmOFhNeEJ0c0dWRlJEVkJmZzdBZ01CQUFHZ1BqQThCZ2txaGtpRzl3MEJDUTR4THpBdE1Dc0dBMVVkRVFRa01DS0NFWGQzZHk1emRXSnpkSEpoYTNRdVkyOXRnZzF6ZFdKemRISmhhM1F1WTI5dE1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQU9oNmdqNkV4UHJYdVhQcC1mc1BKTm5wVVdyeGVyTS1CR3FiVER2WGZtQThYRDVzZzZlcFNPZ1V2UzBoS0d6SU5TSGJuZC1laFY1cHVmZk53bHk3MHFyNU5fcUhsSjNaTHpXYTdvMVEtNmJ3YXFPaXBqV0tJREw1NEJWd053TUhjWGV2VDhrVWxnM1MyTmctSDFRVkgtdEk2M2RPdWpoNjFrRlhhZW9KUHFENDlJTDJnYTdNMzhZb2FwNmozc0VjN2JnMEhPQ0Vna0VFSloxOWdfRmpFSmdvdGRIVnBmT1NqRGkwNldKWjItbENaRjBRSDFSSjJWUzJ2c202dV9oNXRZNTNhbnVMczZjT09nVkNVQ2I4ZDZHbi11bExDY0NzXzAyS09vWm1mYUdmVmJnU01PVy1ZMkp5YUdyblp4NkIwSlRPcnlXNFlZem5KM3dtWXUzUEItIn0","signature":"uHvhuyJHZDmA5EMWL5pqYWH9ogXuQ6GRIiym5fw4OEe9GBlw9RQPIGFrg97kWhyK7mIFA4SHcC12nhZKZYDkDQx01iPABhLO7O08EpZ4e4ivU7JgwMKIO6sVc17iYKqutGXo6u3lYlbYuF3XT9wr-frpi0Kyny_iSmt9pFLTy6Ay0_wYDmzN_kw1fm-6c6mpbIY6KcKHHR2to-UsjFk6uUfr6wvgpaNOotgGGrySbnE8J4uDTb2ND3HYX29a9i2qCXS-ugnlZRISHab1EQaJmUKivA1leMeBFvUoZEFPoPl3GywOCexnBYQCrDRSdUSmbBNAmo1o2CEBXyWienNpYLyX7K4bDcr2p9e6OGUm3IgIoQtFoTkYqw5dWtlAFA7TuuJMY-LXBI3VAdKvg1ak3mOMtsTDRG0kcAsmpaP8zmBqJwZESk26ux-mpoxJ8reHoTwzPo93Cy8qc9PQwji1jmn9Zs3yxywIbjqrZNOGD-2gnVISQE9xWDtdyxF0peId9P7DG4Cx3ifTR7OIke9rEFHLdY-I_HLZfU8Kdn-okp5PYeMdi_TRQK2CTjaf2CkolkF-GaeZ47CFlinONfMfeX7lQfp6GYVvglvt4h94pMyjoG7S0lGuFt8uMAIBvF6Z8r1Sm7kl5phx85q7fNI358HuO2zoHO9dnc5fuG8WgXM"}'
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
  response:
    status:
      code: 201
      message: Created
    headers:
      Server:
      - nginx
      Content-Type:
      - application/pkix-cert
      Content-Length:
      - '1274'
      Boulder-Request-Id:
      - "-6NpeFKSPxiTJEwrd9s_hx6c1kNc_kWDt1pSR35C4JE"
      Boulder-Requester:
      - '515230'
      Link:
      - <https://acme-staging.api.letsencrypt.org/acme/issuer-cert>;rel="up"
      Location:
      - https://acme-staging.api.letsencrypt.org/acme/cert/fa4b69c38073141a7eea9bb114c26150f7c0
      Replay-Nonce:
      - qezAbnjgJKo0y3NAEfGg9F3K3AA8jYKI-yg4o50WuD8
      X-Frame-Options:
      - DENY
      Strict-Transport-Security:
      - max-age=604800
      Expires:
      - Fri, 25 Nov 2016 19:44:54 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Fri, 25 Nov 2016 19:44:54 GMT
      Connection:
      - keep-alive
    body:
      encoding: ASCII-8BIT
      string: !binary |-
        MIIE9jCCA96gAwIBAgITAPpLacOAcxQafuqbsRTCYVD3wDANBgkqhkiG9w0B
        AQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0x
        NjExMjUxODQ1MDBaFw0xNzAyMjMxODQ1MDBaMBwxGjAYBgNVBAMTEXd3dy5z
        dWJzdHJha3QuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
        wq6lDvi9L0SlKYQzKIOP9tV0UydCA1OwUtnwat75Ins/T/Brhmz9VKPf0thO
        HjSiKh2JVOnMNXWzsaE7V4ov1OvAFWBW4WbaSim3jQHwOPSK4vxipHfENNL3
        if+c6pWb4xS78aXUXTwVpE7cNM3EoCGQ9rp7g9w8OSqn/Rc11APPyfe0CkSv
        cEdvf1yvtDj3om2ZXviBgJJWI6OESC+1J8Qg4XV1G72ge0ogMQLolnsCjySM
        F7OEKCjadOTnbUB8v6ey1Yd5ezA6sSXBr6sAJ9eWV3GIO4p3i9jlIK9jEUyU
        Zhl8oZr7pRqGeDVDvoEUPgkH/FzMQbbBlRUQ1QX4OwIDAQABo4ICKTCCAiUw
        DgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD
        AjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQRQZjLolDgUCryrpcZ8JVcFLEs
        3TAfBgNVHSMEGDAWgBTAzANGuVggzFxycPPhLssgpvVoOjB4BggrBgEFBQcB
        AQRsMGowMwYIKwYBBQUHMAGGJ2h0dHA6Ly9vY3NwLnN0Zy1pbnQteDEubGV0
        c2VuY3J5cHQub3JnLzAzBggrBgEFBQcwAoYnaHR0cDovL2NlcnQuc3RnLWlu
        dC14MS5sZXRzZW5jcnlwdC5vcmcvMCsGA1UdEQQkMCKCDXN1YnN0cmFrdC5j
        b22CEXd3dy5zdWJzdHJha3QuY29tMIH+BgNVHSAEgfYwgfMwCAYGZ4EMAQIB
        MIHmBgsrBgEEAYLfEwEBATCB1jAmBggrBgEFBQcCARYaaHR0cDovL2Nwcy5s
        ZXRzZW5jcnlwdC5vcmcwgasGCCsGAQUFBwICMIGeDIGbVGhpcyBDZXJ0aWZp
        Y2F0ZSBtYXkgb25seSBiZSByZWxpZWQgdXBvbiBieSBSZWx5aW5nIFBhcnRp
        ZXMgYW5kIG9ubHkgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBDZXJ0aWZpY2F0
        ZSBQb2xpY3kgZm91bmQgYXQgaHR0cHM6Ly9sZXRzZW5jcnlwdC5vcmcvcmVw
        b3NpdG9yeS8wDQYJKoZIhvcNAQELBQADggEBAE+r7xj9qkLUKSEvy8GCf4L3
        FvCaWWA+fEGUyqPy5ANHaKh5EUBDDZAfFaptSXas402bIKA+gIqx3Fq+rS87
        SuXwG/OB0BvXGvLe7nHAxpMNRtHx51zz2RSKmDpQGgDJ9z7iwEgoDsn0Fwmf
        IR/HoTOIrQP4STC866/eXj8NrppHZf08/ZTegGYyXSwaW5w12uZRqQfpO3Kj
        2L9XjOPh7j3mxi5E1HrSj4ZemJnQh8pC+6jwT2qfoCjYhHkUaxPBlP2yiljH
        IA0a1TgVIqGI9WeH8LZmC/GG5dpLG0htwL+mmIKth/x5YNU5jKJWZA6ESHv8
        3e2A3d7wgI9d792ntD4=
    http_version: 
  recorded_at: Fri, 25 Nov 2016 19:44:54 GMT
- request:
    method: get
    uri: https://acme-staging.api.letsencrypt.org/acme/issuer-cert
    body:
      encoding: UTF-8
      string: '{"protected":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm5vbmNlIjoicWV6QWJuamdKS28weTNOQUVmR2c5RjNLM0FBOGpZS0kteWc0bzUwV3VEOCIsImp3ayI6eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsIm4iOiJ1NTRZdWE1WV91N3lXMlZHS0drQVpjRW8yWGx5Sk9YdGVyR3dac01zRU54aG5oUUFSR0l5cFdkZkd4N0pyWll1Zm80NTNuZWFJWk1LY19DSDY4bXpmQVRQM0hUV2tjNE9hQ0hPaFN2TVh5bEdaMWJKelpnV0I5VEFUc3JZNjYxd1g3eEhteVNOVDYtamdYel9XY3dQVDU1b1pDY2M5QUgtT0FyUzhEdUo4NU0wNFpwWDZUaHBoS2x1QlRncUlMYnhjNVJydndCcFRHemw1VU5mUmhzd0xKbEZiMmdvQ0dsUFVERUhjSy1GQ2xIRmVubkRnU0VlWDRLaHdYdXgzazBLb3FXemxibURwWjc0X0trMFMwWC1zdmVqTUphMFExaThnSWJxQmRhZFlvaHo0aDhJV05SbW9za1BHXzNTWGRuLWZKOE53eHZwbzhFS04yNjEzdGhQd1JvMnlSQkR5YU5TcFBMNXJ0RllhTXM0SkgtdlFDNTNIUXoyTVlOb200dU92TkVWUFV1dTVvQXRna2NrOVNGcXc3djBza1pLdTQtZUlSZEFFZTFaQW5LQXRXYlE3M2p1T3RzekIyeE1Oc0ZiaVE1a1lGZVB5bzV1WlJKSEtXLVJycVJySmpCTFg5RVJZWEktQUI0aFpDOExRajlDY0hjZDgtNEt0QkdnYlJLX3pKR2paSENYdk9qeXRxcU9UZEwwM1lFZEVKZXFsZDA0dDYyeDU4dl9fZUYyMldNeS1ETUxhaTAxRElVSkFaX2hFN3JwOU1WOVQxdDQ5WUNIVElTYlhhaWM2YTF3YjZicFNsbDRUVHJTbHFpa0ZsY0w0VEh2MjkzZmxzR0drRzZGYXNqTFpiZUczUjRYTTlMYl9Ha0RkTXZMcThzQ3BLQ3NWaFlNVEhXTzk3ayJ9fQ","payload":"e30","signature":"XY5hoCrTZ7VjCjvEdGEJfSHV4UpV7_2HRe8TkDyDQqueFHBW3pLbwiGRRDn_f4d-eEvrIx0tMr_uw_xIwsxNbagMzt3UoeqJdLL5Uk0WB_sNSei4NEtIChAnHBaaKNdo-FCaq9Gl8EJVvKN4HK9NxzgXLL6W3fKVIj13NruepaEfC9PU_j1Pb4OKzPSPRTK5ajmFg2Sb6n3sRqhWwYGzTJm-v5nNEUAHt60RjfH0flVJQPWisSRfZger_-D04M0rIIo-mRXRYTsBPg0rSr4nBPwmHDz-3lVJbBXT0i_BEy9iFzMn_pKne1puAutga8SL14lEezbeqRMPiw1KuJWbWZMHxQXSDVKU0W9J-ZN-0FBazcUDnWUfWrc6Qyw_8M9oDSjzPixVh1RsqlsYIm63nQCnPXJzFMC0TKfa_8BJ2iSqSCn-sIMVSaQDZ1cyvQcND4dlJfW_hFhX_Z0hoeFf50jBuhocGrBuPMFf6oW3nDUmTzFCfq4dsUz9sB3Tv7ceDxlxvfUpf8hWe2nAMeN89VfX0BS6Li6aLJHRISO-suuATZruO2pqlkHhj4Dp8XHewrCGlrDcw16b2NVKOUdprSktS4NK-y5ngOxSd7jxzMKPQsCNGmxay-fu5ZVnwoMT5Qg8ztEMq7lrolv9cV4sNgQl-i6UJUqC9PsR56fsmm4"}'
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
  response:
    status:
      code: 200
      message: OK
    headers:
      Server:
      - nginx
      Content-Type:
      - application/pkix-cert
      Content-Length:
      - '1199'
      Boulder-Request-Id:
      - MBbOsY_5txwuejfS3DgRcC3eo0BHW0Oe_G7Y5L0URqQ
      Replay-Nonce:
      - S3E9q-m_Hv211tzT0exvzN3FmyYSFZ_C8TDe15fxmF8
      X-Frame-Options:
      - DENY
      Strict-Transport-Security:
      - max-age=604800
      Expires:
      - Fri, 25 Nov 2016 19:44:54 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Fri, 25 Nov 2016 19:44:54 GMT
      Connection:
      - keep-alive
    body:
      encoding: ASCII-8BIT
      string: !binary |-
        MIIEqzCCApOgAwIBAgIRAIvhKg5ZRO08VGQx8JdhT+UwDQYJKoZIhvcNAQEL
        BQAwGjEYMBYGA1UEAwwPRmFrZSBMRSBSb290IFgxMB4XDTE2MDUyMzIyMDc1
        OVoXDTM2MDUyMzIyMDc1OVowIjEgMB4GA1UEAwwXRmFrZSBMRSBJbnRlcm1l
        ZGlhdGUgWDEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDtWKyS
        Dn7rWZc5ggjz3ZB08jO4xti3uzINfD5sQ7Lj7hzetUT+wQob+iXSZkhnvx+I
        vdbXF5/yt8aWPpUKnPymoLxsYiI5gQBLxNDzIec0OIaflWqAr29m7J8+NNtA
        pEN8nZFnf3bhehZW7AxmS1m0ZnSsdHw0Fw+bgixPg2MQ9k9oefFeqa+7Kqdl
        z5bbrUYV2volxhDFtnI4Mh8BiWCNxDH1Hizq+GKCcHsinDZWurCqder/afJB
        nQs+SBSL6MVApHt+d35zjBD92fO2Je56dhMfzCgOKXeJ340WhW3TjD1zqLZX
        eaCyUNRnfOmWZV8nEhtHOFbUCU7r/KkjMZO9AgMBAAGjgeMwgeAwDgYDVR0P
        AQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFMDMA0a5
        WCDMXHJw8+EuyyCm9Wg6MHoGCCsGAQUFBwEBBG4wbDA0BggrBgEFBQcwAYYo
        aHR0cDovL29jc3Auc3RnLXJvb3QteDEubGV0c2VuY3J5cHQub3JnLzA0Bggr
        BgEFBQcwAoYoaHR0cDovL2NlcnQuc3RnLXJvb3QteDEubGV0c2VuY3J5cHQu
        b3JnLzAfBgNVHSMEGDAWgBTBJnSkikSg5vogKNhcI5pFiBh54DANBgkqhkiG
        9w0BAQsFAAOCAgEABYSu4Il+fI0MYU42OTmEj+1HqQ5DvyAeyCA6sGuZdwjF
        UGeVOv3NnLyfofuUOjEbY5irFCDtnv+0ckukUZN9lz4Q2YjWGUpW4TTu3ieT
        saC9AFvCSgNHJyWSVtWvB5XDxsqawl1KzHzzwr132bF2rtGtazSqVqK9E07s
        GHMCf+zpDQVDVVGtqZPHwX3KqUtefE621b8RI6VCl4oD30Olf8pjuzG4JKBF
        RFclzLRjo/h7IkkfjZ8wDa7faOjVXx6n+eUQ29cIMCzr8/rNWHS9pYGGQKJi
        Y2xmVC9h12H99XyfzWE9vb5zKP3MVG6neX1hSdo7PEAb9fqRhHkqVsqUvJlI
        RmvXvVKTwNCP3eCjRCCIPTAvjV+4ni786iXwwFYNz8l3PmPLCyQXWGohnJ8i
        Bm+5nk7O2ynaPVW0U2W+pt2wSVuvdDM5zGv2f9ltNWUiYZHJ1mmO97jSY/6Y
        fdOUH66iRtQtDkHBRdkNBsMbD+Em2TgBldtHNSJBfB3pm9FblgOcJ0FSWcUD
        WJ7vO0+NTXlgrRofRT6pVywzxVo6dND0WzYlTWeUVsO40xJqhgUQRER9YLOL
        xJ0O6C8i0xFxAMKOtSdodMB3RIwt7RFQ0uytn5Z5MqkYhlMI3J1tPRTp1nEt
        9fyGspBOO05gi148Qasp+3N+svqKomoQglNoAxU=
    http_version: 
  recorded_at: Fri, 25 Nov 2016 19:44:54 GMT
- request:
    method: patch
    uri: https://api.heroku.com/apps/ssl-test-maxwoolf/features/http-sni
    body:
      encoding: UTF-8
      string: '{"enabled":true}'
    headers:
      Accept:
      - application/vnd.heroku+json; version=3.sni_ssl_cert
      Authorization:
      - Bearer 67705361-152c-4761-96aa-ec904d6cd071
      Content-Type:
      - application/json
  response:
    status:
      code: 404
      message: Not Found
    headers:
      Cache-Control:
      - private, no-cache
      Content-Type:
      - application/json
      Date:
      - Fri, 25 Nov 2016 19:44:55 GMT
      Ratelimit-Multiplier:
      - '1'
      Ratelimit-Remaining:
      - '4491'
      Request-Id:
      - 49a27510-71fe-45f9-4a52-0840a0a057c3,36dde210-58e4-c835-e65e-79cd4ae9192c
      Vary:
      - Accept-Encoding
      Via:
      - 1.1 spaces-router (+291255b)
      X-Content-Type-Options:
      - nosniff
      X-Runtime:
      - '0.080851622'
      Content-Length:
      - '79'
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: '{"resource":"feature","id":"not_found","message":"Couldn''t find that
        feature."}'
    http_version: 
  recorded_at: Fri, 25 Nov 2016 19:44:55 GMT
- request:
    method: post
    uri: https://api.heroku.com/apps/ssl-test-maxwoolf/sni-endpoints
    body:
      encoding: UTF-8
      string: '{"certificate_chain":"-----BEGIN CERTIFICATE-----\nMIIE9jCCA96gAwIBAgITAPpLacOAcxQafuqbsRTCYVD3wDANBgkqhkiG9w0BAQsF\nADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xNjExMjUx\nODQ1MDBaFw0xNzAyMjMxODQ1MDBaMBwxGjAYBgNVBAMTEXd3dy5zdWJzdHJha3Qu\nY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwq6lDvi9L0SlKYQz\nKIOP9tV0UydCA1OwUtnwat75Ins/T/Brhmz9VKPf0thOHjSiKh2JVOnMNXWzsaE7\nV4ov1OvAFWBW4WbaSim3jQHwOPSK4vxipHfENNL3if+c6pWb4xS78aXUXTwVpE7c\nNM3EoCGQ9rp7g9w8OSqn/Rc11APPyfe0CkSvcEdvf1yvtDj3om2ZXviBgJJWI6OE\nSC+1J8Qg4XV1G72ge0ogMQLolnsCjySMF7OEKCjadOTnbUB8v6ey1Yd5ezA6sSXB\nr6sAJ9eWV3GIO4p3i9jlIK9jEUyUZhl8oZr7pRqGeDVDvoEUPgkH/FzMQbbBlRUQ\n1QX4OwIDAQABo4ICKTCCAiUwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsG\nAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQRQZjLolDg\nUCryrpcZ8JVcFLEs3TAfBgNVHSMEGDAWgBTAzANGuVggzFxycPPhLssgpvVoOjB4\nBggrBgEFBQcBAQRsMGowMwYIKwYBBQUHMAGGJ2h0dHA6Ly9vY3NwLnN0Zy1pbnQt\neDEubGV0c2VuY3J5cHQub3JnLzAzBggrBgEFBQcwAoYnaHR0cDovL2NlcnQuc3Rn\nLWludC14MS5sZXRzZW5jcnlwdC5vcmcvMCsGA1UdEQQkMCKCDXN1YnN0cmFrdC5j\nb22CEXd3dy5zdWJzdHJha3QuY29tMIH+BgNVHSAEgfYwgfMwCAYGZ4EMAQIBMIHm\nBgsrBgEEAYLfEwEBATCB1jAmBggrBgEFBQcCARYaaHR0cDovL2Nwcy5sZXRzZW5j\ncnlwdC5vcmcwgasGCCsGAQUFBwICMIGeDIGbVGhpcyBDZXJ0aWZpY2F0ZSBtYXkg\nb25seSBiZSByZWxpZWQgdXBvbiBieSBSZWx5aW5nIFBhcnRpZXMgYW5kIG9ubHkg\naW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBDZXJ0aWZpY2F0ZSBQb2xpY3kgZm91bmQg\nYXQgaHR0cHM6Ly9sZXRzZW5jcnlwdC5vcmcvcmVwb3NpdG9yeS8wDQYJKoZIhvcN\nAQELBQADggEBAE+r7xj9qkLUKSEvy8GCf4L3FvCaWWA+fEGUyqPy5ANHaKh5EUBD\nDZAfFaptSXas402bIKA+gIqx3Fq+rS87SuXwG/OB0BvXGvLe7nHAxpMNRtHx51zz\n2RSKmDpQGgDJ9z7iwEgoDsn0FwmfIR/HoTOIrQP4STC866/eXj8NrppHZf08/ZTe\ngGYyXSwaW5w12uZRqQfpO3Kj2L9XjOPh7j3mxi5E1HrSj4ZemJnQh8pC+6jwT2qf\noCjYhHkUaxPBlP2yiljHIA0a1TgVIqGI9WeH8LZmC/GG5dpLG0htwL+mmIKth/x5\nYNU5jKJWZA6ESHv83e2A3d7wgI9d792ntD4=\n-----END
        CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIEqzCCApOgAwIBAgIRAIvhKg5ZRO08VGQx8JdhT+UwDQYJKoZIhvcNAQELBQAw\nGjEYMBYGA1UEAwwPRmFrZSBMRSBSb290IFgxMB4XDTE2MDUyMzIyMDc1OVoXDTM2\nMDUyMzIyMDc1OVowIjEgMB4GA1UEAwwXRmFrZSBMRSBJbnRlcm1lZGlhdGUgWDEw\nggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDtWKySDn7rWZc5ggjz3ZB0\n8jO4xti3uzINfD5sQ7Lj7hzetUT+wQob+iXSZkhnvx+IvdbXF5/yt8aWPpUKnPym\noLxsYiI5gQBLxNDzIec0OIaflWqAr29m7J8+NNtApEN8nZFnf3bhehZW7AxmS1m0\nZnSsdHw0Fw+bgixPg2MQ9k9oefFeqa+7Kqdlz5bbrUYV2volxhDFtnI4Mh8BiWCN\nxDH1Hizq+GKCcHsinDZWurCqder/afJBnQs+SBSL6MVApHt+d35zjBD92fO2Je56\ndhMfzCgOKXeJ340WhW3TjD1zqLZXeaCyUNRnfOmWZV8nEhtHOFbUCU7r/KkjMZO9\nAgMBAAGjgeMwgeAwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAw\nHQYDVR0OBBYEFMDMA0a5WCDMXHJw8+EuyyCm9Wg6MHoGCCsGAQUFBwEBBG4wbDA0\nBggrBgEFBQcwAYYoaHR0cDovL29jc3Auc3RnLXJvb3QteDEubGV0c2VuY3J5cHQu\nb3JnLzA0BggrBgEFBQcwAoYoaHR0cDovL2NlcnQuc3RnLXJvb3QteDEubGV0c2Vu\nY3J5cHQub3JnLzAfBgNVHSMEGDAWgBTBJnSkikSg5vogKNhcI5pFiBh54DANBgkq\nhkiG9w0BAQsFAAOCAgEABYSu4Il+fI0MYU42OTmEj+1HqQ5DvyAeyCA6sGuZdwjF\nUGeVOv3NnLyfofuUOjEbY5irFCDtnv+0ckukUZN9lz4Q2YjWGUpW4TTu3ieTsaC9\nAFvCSgNHJyWSVtWvB5XDxsqawl1KzHzzwr132bF2rtGtazSqVqK9E07sGHMCf+zp\nDQVDVVGtqZPHwX3KqUtefE621b8RI6VCl4oD30Olf8pjuzG4JKBFRFclzLRjo/h7\nIkkfjZ8wDa7faOjVXx6n+eUQ29cIMCzr8/rNWHS9pYGGQKJiY2xmVC9h12H99Xyf\nzWE9vb5zKP3MVG6neX1hSdo7PEAb9fqRhHkqVsqUvJlIRmvXvVKTwNCP3eCjRCCI\nPTAvjV+4ni786iXwwFYNz8l3PmPLCyQXWGohnJ8iBm+5nk7O2ynaPVW0U2W+pt2w\nSVuvdDM5zGv2f9ltNWUiYZHJ1mmO97jSY/6YfdOUH66iRtQtDkHBRdkNBsMbD+Em\n2TgBldtHNSJBfB3pm9FblgOcJ0FSWcUDWJ7vO0+NTXlgrRofRT6pVywzxVo6dND0\nWzYlTWeUVsO40xJqhgUQRER9YLOLxJ0O6C8i0xFxAMKOtSdodMB3RIwt7RFQ0uyt\nn5Z5MqkYhlMI3J1tPRTp1nEt9fyGspBOO05gi148Qasp+3N+svqKomoQglNoAxU=\n-----END
        CERTIFICATE-----\n","private_key":"-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEAwq6lDvi9L0SlKYQzKIOP9tV0UydCA1OwUtnwat75Ins/T/Br\nhmz9VKPf0thOHjSiKh2JVOnMNXWzsaE7V4ov1OvAFWBW4WbaSim3jQHwOPSK4vxi\npHfENNL3if+c6pWb4xS78aXUXTwVpE7cNM3EoCGQ9rp7g9w8OSqn/Rc11APPyfe0\nCkSvcEdvf1yvtDj3om2ZXviBgJJWI6OESC+1J8Qg4XV1G72ge0ogMQLolnsCjySM\nF7OEKCjadOTnbUB8v6ey1Yd5ezA6sSXBr6sAJ9eWV3GIO4p3i9jlIK9jEUyUZhl8\noZr7pRqGeDVDvoEUPgkH/FzMQbbBlRUQ1QX4OwIDAQABAoIBAHqj1D0TOvJ89uKp\nciTShC2FmCsN7wrzfH8k5cwdPKqZI3AzTzk2jXv1Y/mJ4+QpWgLX6nyAb/E5fYKn\nxB9IYQtrm+ybbP+/cEIJ96QvlWn7u0Z0oZtkC0kPoXrgeLRanQI3PJJk2dwGDsgc\nGaJ2AaiynIShQ0/0vEdy9LJ+HZ250gLgK4yjcV0WR+Ilvjs1EHK8i6NtTpGiGruF\nwv7N9yIfehBiQtZ9v7DT/gq21TVmW6qCc7+EJTxDtCXxcg8CsOLt7aoyGs61rjwo\n6+a8HursDNeO53yDAAFwZwKFBSZwfvcdy+KxVfp+5TsehZZkcmyP04pl+u92auRV\nt8V81EECgYEA+SqbtaO2GJeV3nFIjzqT6zVF9HStRncsVHLn50cGluKT7TqySOAT\n8QG59TbhCrTx7ST5Eu9nM0ia8q9jW/vYw+U2do9GmQ3OIl8rbKZMjy/vrPA2yzZM\nBz5h4YE9F6KxR+gXtIaGSI0kIXHw3HeAQoU02+BS6kecQHZLnMW/EtsCgYEAyAWB\nBbTS0qTIYSnfd6JIbekPLGvkEvrcD7TcCk8HztTOswEZjgPW8BCkMoAetG1dvvBv\nW6d6J1zRKbHD5KtvDVRCF+GUJBdv5GIhRdcvimQyZa6dV9uqHlmg2rd2Q+UuNjpA\nluyZKcDOCQqvBypeIUc3WOWBa278hXTGnNwSviECgYA3UWRcgUouT4kwZ4oqcmDg\nuWUcjsLhgBfRb+lYiYZG/WrGIl/umgETYsS8UkDINb/4XFsH/yq0UgxEkPfINjO7\n2imrTMfptwzqyKJFbu5UY9ocVQB1QUrD2O+2NxEvLCmbw0VwCOXLObqpyjglWkqZ\neiVwI2+FH/zqutiyp5xyPQKBgQCPB+CLRBK9rjfbwyWZVuKUNeQzz7L4H4rdcGco\nt/rNXD+yoUa01uoMINpJgnRycQJoV2ZKFCi1nRm0xvldu3ld/rKEgTp91ISeu80v\nNAE65QtkysiY2ut7aHwt6qMXSfsRq/Yj9mxP/x9WN92RMiq9gT+CwhsZx/OrOyYL\nZRPCAQKBgCCH3zbeTAU6iif+OEb5SpsSunMeoiBagFWyEsGsNBNViUQMtt5dQiRy\noAGxBOZOCOVgiCaLKAzTSxSnqZksPKm3qhwa23lIb5TZdfUhKCZE/QrTtsiiV6/B\ngjuQfeabmKl22MZUnYYCprdJNs+mHj72UIcoftuVhK11d9iy3Wsj\n-----END
        RSA PRIVATE KEY-----\n"}'
    headers:
      Accept:
      - application/vnd.heroku+json; version=3.sni_ssl_cert
      Authorization:
      - Bearer 67705361-152c-4761-96aa-ec904d6cd071
      Content-Type:
      - application/json
  response:
    status:
      code: 202
      message: Accepted
    headers:
      Cache-Control:
      - private, no-cache
      Content-Type:
      - application/json
      Date:
      - Fri, 25 Nov 2016 19:44:56 GMT
      Oauth-Scope:
      - global
      Oauth-Scope-Accepted:
      - global write write-protected
      Ratelimit-Multiplier:
      - '1'
      Ratelimit-Remaining:
      - '4490'
      Request-Id:
      - 99fa5d8a-ec09-44e8-7703-53ff71c4e5e3,7476eb24-ac18-5871-40f0-7c9a2f2c4b3b
      Vary:
      - Accept-Encoding
      Via:
      - 1.1 spaces-router (+291255b)
      X-Content-Type-Options:
      - nosniff
      X-Runtime:
      - '0.549942558'
      Transfer-Encoding:
      - chunked
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: '{"app":{"id":"81bc00a1-056a-4987-9a61-77a07b3b36ec","name":"ssl-test-maxwoolf"},"certificate_chain":"-----BEGIN
        CERTIFICATE-----\nMIIE9jCCA96gAwIBAgITAPpLacOAcxQafuqbsRTCYVD3wDANBgkqhkiG9w0BAQsF\nADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0xNjExMjUx\nODQ1MDBaFw0xNzAyMjMxODQ1MDBaMBwxGjAYBgNVBAMTEXd3dy5zdWJzdHJha3Qu\nY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwq6lDvi9L0SlKYQz\nKIOP9tV0UydCA1OwUtnwat75Ins/T/Brhmz9VKPf0thOHjSiKh2JVOnMNXWzsaE7\nV4ov1OvAFWBW4WbaSim3jQHwOPSK4vxipHfENNL3if+c6pWb4xS78aXUXTwVpE7c\nNM3EoCGQ9rp7g9w8OSqn/Rc11APPyfe0CkSvcEdvf1yvtDj3om2ZXviBgJJWI6OE\nSC+1J8Qg4XV1G72ge0ogMQLolnsCjySMF7OEKCjadOTnbUB8v6ey1Yd5ezA6sSXB\nr6sAJ9eWV3GIO4p3i9jlIK9jEUyUZhl8oZr7pRqGeDVDvoEUPgkH/FzMQbbBlRUQ\n1QX4OwIDAQABo4ICKTCCAiUwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsG\nAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQRQZjLolDg\nUCryrpcZ8JVcFLEs3TAfBgNVHSMEGDAWgBTAzANGuVggzFxycPPhLssgpvVoOjB4\nBggrBgEFBQcBAQRsMGowMwYIKwYBBQUHMAGGJ2h0dHA6Ly9vY3NwLnN0Zy1pbnQt\neDEubGV0c2VuY3J5cHQub3JnLzAzBggrBgEFBQcwAoYnaHR0cDovL2NlcnQuc3Rn\nLWludC14MS5sZXRzZW5jcnlwdC5vcmcvMCsGA1UdEQQkMCKCDXN1YnN0cmFrdC5j\nb22CEXd3dy5zdWJzdHJha3QuY29tMIH+BgNVHSAEgfYwgfMwCAYGZ4EMAQIBMIHm\nBgsrBgEEAYLfEwEBATCB1jAmBggrBgEFBQcCARYaaHR0cDovL2Nwcy5sZXRzZW5j\ncnlwdC5vcmcwgasGCCsGAQUFBwICMIGeDIGbVGhpcyBDZXJ0aWZpY2F0ZSBtYXkg\nb25seSBiZSByZWxpZWQgdXBvbiBieSBSZWx5aW5nIFBhcnRpZXMgYW5kIG9ubHkg\naW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBDZXJ0aWZpY2F0ZSBQb2xpY3kgZm91bmQg\nYXQgaHR0cHM6Ly9sZXRzZW5jcnlwdC5vcmcvcmVwb3NpdG9yeS8wDQYJKoZIhvcN\nAQELBQADggEBAE+r7xj9qkLUKSEvy8GCf4L3FvCaWWA+fEGUyqPy5ANHaKh5EUBD\nDZAfFaptSXas402bIKA+gIqx3Fq+rS87SuXwG/OB0BvXGvLe7nHAxpMNRtHx51zz\n2RSKmDpQGgDJ9z7iwEgoDsn0FwmfIR/HoTOIrQP4STC866/eXj8NrppHZf08/ZTe\ngGYyXSwaW5w12uZRqQfpO3Kj2L9XjOPh7j3mxi5E1HrSj4ZemJnQh8pC+6jwT2qf\noCjYhHkUaxPBlP2yiljHIA0a1TgVIqGI9WeH8LZmC/GG5dpLG0htwL+mmIKth/x5\nYNU5jKJWZA6ESHv83e2A3d7wgI9d792ntD4=\n-----END
        CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIEqzCCApOgAwIBAgIRAIvhKg5ZRO08VGQx8JdhT+UwDQYJKoZIhvcNAQELBQAw\nGjEYMBYGA1UEAwwPRmFrZSBMRSBSb290IFgxMB4XDTE2MDUyMzIyMDc1OVoXDTM2\nMDUyMzIyMDc1OVowIjEgMB4GA1UEAwwXRmFrZSBMRSBJbnRlcm1lZGlhdGUgWDEw\nggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDtWKySDn7rWZc5ggjz3ZB0\n8jO4xti3uzINfD5sQ7Lj7hzetUT+wQob+iXSZkhnvx+IvdbXF5/yt8aWPpUKnPym\noLxsYiI5gQBLxNDzIec0OIaflWqAr29m7J8+NNtApEN8nZFnf3bhehZW7AxmS1m0\nZnSsdHw0Fw+bgixPg2MQ9k9oefFeqa+7Kqdlz5bbrUYV2volxhDFtnI4Mh8BiWCN\nxDH1Hizq+GKCcHsinDZWurCqder/afJBnQs+SBSL6MVApHt+d35zjBD92fO2Je56\ndhMfzCgOKXeJ340WhW3TjD1zqLZXeaCyUNRnfOmWZV8nEhtHOFbUCU7r/KkjMZO9\nAgMBAAGjgeMwgeAwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAw\nHQYDVR0OBBYEFMDMA0a5WCDMXHJw8+EuyyCm9Wg6MHoGCCsGAQUFBwEBBG4wbDA0\nBggrBgEFBQcwAYYoaHR0cDovL29jc3Auc3RnLXJvb3QteDEubGV0c2VuY3J5cHQu\nb3JnLzA0BggrBgEFBQcwAoYoaHR0cDovL2NlcnQuc3RnLXJvb3QteDEubGV0c2Vu\nY3J5cHQub3JnLzAfBgNVHSMEGDAWgBTBJnSkikSg5vogKNhcI5pFiBh54DANBgkq\nhkiG9w0BAQsFAAOCAgEABYSu4Il+fI0MYU42OTmEj+1HqQ5DvyAeyCA6sGuZdwjF\nUGeVOv3NnLyfofuUOjEbY5irFCDtnv+0ckukUZN9lz4Q2YjWGUpW4TTu3ieTsaC9\nAFvCSgNHJyWSVtWvB5XDxsqawl1KzHzzwr132bF2rtGtazSqVqK9E07sGHMCf+zp\nDQVDVVGtqZPHwX3KqUtefE621b8RI6VCl4oD30Olf8pjuzG4JKBFRFclzLRjo/h7\nIkkfjZ8wDa7faOjVXx6n+eUQ29cIMCzr8/rNWHS9pYGGQKJiY2xmVC9h12H99Xyf\nzWE9vb5zKP3MVG6neX1hSdo7PEAb9fqRhHkqVsqUvJlIRmvXvVKTwNCP3eCjRCCI\nPTAvjV+4ni786iXwwFYNz8l3PmPLCyQXWGohnJ8iBm+5nk7O2ynaPVW0U2W+pt2w\nSVuvdDM5zGv2f9ltNWUiYZHJ1mmO97jSY/6YfdOUH66iRtQtDkHBRdkNBsMbD+Em\n2TgBldtHNSJBfB3pm9FblgOcJ0FSWcUDWJ7vO0+NTXlgrRofRT6pVywzxVo6dND0\nWzYlTWeUVsO40xJqhgUQRER9YLOLxJ0O6C8i0xFxAMKOtSdodMB3RIwt7RFQ0uyt\nn5Z5MqkYhlMI3J1tPRTp1nEt9fyGspBOO05gi148Qasp+3N+svqKomoQglNoAxU=\n-----END
        CERTIFICATE-----\n","cname":null,"created_at":"2016-11-25T19:44:56Z","id":"b8043b0a-ae99-4998-befd-2cf7b4ecb362","name":"velociraptor-64516","updated_at":"2016-11-25T19:44:56Z","warnings":{"ssl_cert":["provides
        no domain(s) that are configured for this Heroku app"]},"ssl_cert":{"ca_signed?":false,"cert_domains":["www.substrakt.com","substrakt.com"],"expires_at":"2017-02-23T18:45:00Z","issuer":"/CN=Fake
        LE Intermediate X1","self_signed?":false,"starts_at":"2016-11-25T18:45:00Z","subject":"/CN=www.substrakt.com","id":"5f4de200-2f59-4359-a009-2b9ef09d8a9e"}}'
    http_version: 
  recorded_at: Fri, 25 Nov 2016 19:44:56 GMT
recorded_with: VCR 3.0.3


================================================
FILE: test/fixtures/vcr_cassettes/new-cert-provisioner-heroku.yml
================================================
---
http_interactions:
- request:
    method: head
    uri: https://acme-staging.api.letsencrypt.org/acme/new-reg
    body:
      encoding: US-ASCII
      string: ''
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept:
      - "*/*"
  response:
    status:
      code: 405
      message: Method Not Allowed
    headers:
      Server:
      - nginx
      Content-Type:
      - application/problem+json
      Content-Length:
      - '91'
      Allow:
      - POST
      Boulder-Request-Id:
      - ckXPPtLtoRIdqMIyof2FcDj5mMY4oPp3N61wR6pCXbM
      Replay-Nonce:
      - zGW2hQ3xVmiyz70kbF7fq6LlYoV1ulwYbZMIQvx9HfA
      Expires:
      - Fri, 25 Nov 2016 19:30:36 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Fri, 25 Nov 2016 19:30:36 GMT
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: ''
    http_version: 
  recorded_at: Fri, 25 Nov 2016 19:30:36 GMT
- request:
    method: post
    uri: https://acme-staging.api.letsencrypt.org/acme/new-reg
    body:
      encoding: UTF-8
      string: '{"protected":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm5vbmNlIjoiekdXMmhRM3hWbWl5ejcwa2JGN2ZxNkxsWW9WMXVsd1liWk1JUXZ4OUhmQSIsImp3ayI6eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsIm4iOiJ5bWpzRS0xdGNkVEdjaUEtT2lrcFlRbk8wMkpaNEt3ZlB3NFVkQUxIOFB2dThDZ05TQTJMeDM1NF9ibFUyQUlWbk0taGlWTjQzcHlac0w0NWFibmJJTXRvR0c2dHBHaU9hRGZ2V0J1V2dndTlaeXFCeUgydXVIWXRIR3QyakdTNEhyMi1pVjdva216amc2VEJQT2F5cG15ZmE1UExMbGFtai00Njl4QkZQdlpiUXZGMGQ4RXJOQUh2MmNtbFUwY2xBUmNIeHBQdUFyZzJ3eTMtb3ZKYjdRRWNxN29LZDgxTXZmNFVnVnVkbVN2djNvOERPZDQ4ajRDM056MHk2NzR3MmpCbDFMdThLM2tpVTdmamE1M3VURkZGeDk3aWFyODczXzc0VFB1clZOeXJSQVR0eUNjV1ZQWVZ2ZE5YTVN4OUNGUHRWSDZJbGZib1duckVzTUoxYXFmX04xWHZuaEl4WjRMZERTTzBmZ2FSTW5rU09tRFluUWFZbldOTmRKd2xvLXg3TXM2a3J5SE9yNmVNa0xrWU1pU0EwTWFPd21yOGN6ejk2VWxNX01Tdzc4SE5vbzRhRkw2SFQtMVVDWVZKYWpXUnhHUE9CV3dIeExocnVwMjE0UmlzOGxJSENXSEczQzRmWFIyMFhGRWdrajZPTTVwei1sempPcGZvbk1BTU9IUnc1M3RHSklodlFISHhyUC1QREZZc01RWTlxWVdncjRybEJQRUVyN2t3UkVjRTlDYS1kLUhwNjhkX0tnRUhrUjAwS2dPOWYweER3VkZhcHhxaGNtTGF3alRPUVdFdkRJbC13Wm9QM2tFVFlNeTA5bm5YN1dieDZOcVBPbzh3RTVnU1NKWlNtSC1nS0F5YVBYN0hMNmhTN203d0w1ZFQ4Z0doZ3Z6ZmlZVSJ9fQ","payload":"eyJyZXNvdXJjZSI6Im5ldy1yZWciLCJjb250YWN0IjpbIm1haWx0bzptYXhAc3Vic3RyYWt0LmNvbSJdfQ","signature":"oaSlihny0rkfyxYtkiPdsgxxicGJoT2HhlsnXVUNfLAvQg7hXTBdPxwHbkkvOdWL3E0kJNQSa82tH8g3tNFMVql47W0U6fK4DePriL7_y11OgAzPGzZ7C-0_hXbcwYFoAwwKbBonqacPUa0XAf3uLHGL6DwMcuhKAtFzIHxA0Y7Ga1nYGLf43_E076LhLNlD0zDTFKXnmNbnHqmTjVrSmbWqc0OmDPJCwVoN8kzTcsfLo-HsA6IWIZ3q-eMfHp7WtnVcqvgT8YTn3egPP6J-Ho-syxW9u3UDxsUok9N9w1ERidUe3I_X-i1nY9RIyZypbhwM7s0q6Y6NqOXa5LN5QZo5zAoUApKyffu_DDFmD6gErAiEsL0qccNROtdRHWqs1GcO7VZ6fijmeTQu4yiyHtxnHpXjWhVyJp9wFovMA9sHDMbvD8uhVkS4f3N8nXsw3zzTPtbLaqtimLMCLAazh0hHiRyG779g043uNQoM9XjWoEYZG3lhVhd12etbyQljWiHBIB1vDreDo7rLjMKpA1zAX0YvKi4tUi4Mbpvc-S1X14WgY48bv57basest9nN4Jjx8mTziQD0VCnv2RjFkwPOK6GhO58dV1h93BgENKxSeUie5IaqRZsLhyhGbv0hsZLe9Y-1OMJjdR-P6ZJ4M80PNkMHgWwhdYdiSgNdcbY"}'
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
  response:
    status:
      code: 201
      message: Created
    headers:
      Server:
      - nginx
      Content-Type:
      - application/json
      Content-Length:
      - '912'
      Boulder-Request-Id:
      - MZ1eRoHC20AWq4SSpfIPXFgwMW7I3dYdDmd4L9HApcU
      Boulder-Requester:
      - '515213'
      Link:
      - <https://acme-staging.api.letsencrypt.org/acme/new-authz>;rel="next"
      - <https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf>;rel="terms-of-service"
      Location:
      - https://acme-staging.api.letsencrypt.org/acme/reg/515213
      Replay-Nonce:
      - CC10TqddTMiBhYDvMY9kRV5BdVaRZZwPYSC8tJC_Ph8
      X-Frame-Options:
      - DENY
      Strict-Transport-Security:
      - max-age=604800
      Expires:
      - Fri, 25 Nov 2016 19:30:37 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Fri, 25 Nov 2016 19:30:37 GMT
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: |-
        {
          "id": 515213,
          "key": {
            "kty": "RSA",
            "n": "ymjsE-1tcdTGciA-OikpYQnO02JZ4KwfPw4UdALH8Pvu8CgNSA2Lx354_blU2AIVnM-hiVN43pyZsL45abnbIMtoGG6tpGiOaDfvWBuWggu9ZyqByH2uuHYtHGt2jGS4Hr2-iV7okmzjg6TBPOaypmyfa5PLLlamj-469xBFPvZbQvF0d8ErNAHv2cmlU0clARcHxpPuArg2wy3-ovJb7QEcq7oKd81Mvf4UgVudmSvv3o8DOd48j4C3Nz0y674w2jBl1Lu8K3kiU7fja53uTFFFx97iar873_74TPurVNyrRATtyCcWVPYVvdNXMSx9CFPtVH6IlfboWnrEsMJ1aqf_N1XvnhIxZ4LdDSO0fgaRMnkSOmDYnQaYnWNNdJwlo-x7Ms6kryHOr6eMkLkYMiSA0MaOwmr8czz96UlM_MSw78HNoo4aFL6HT-1UCYVJajWRxGPOBWwHxLhrup214Ris8lIHCWHG3C4fXR20XFEgkj6OM5pz-lzjOpfonMAMOHRw53tGJIhvQHHxrP-PDFYsMQY9qYWgr4rlBPEEr7kwREcE9Ca-d-Hp68d_KgEHkR00KgO9f0xDwVFapxqhcmLawjTOQWEvDIl-wZoP3kETYMy09nnX7Wbx6NqPOo8wE5gSSJZSmH-gKAyaPX7HL6hS7m7wL5dT8gGhgvzfiYU",
            "e": "AQAB"
          },
          "contact": [
            "mailto:max@substrakt.com"
          ],
          "initialIp": "82.43.101.135",
          "createdAt": "2016-11-25T19:30:37.369505856Z",
          "Status": ""
        }
    http_version: 
  recorded_at: Fri, 25 Nov 2016 19:30:37 GMT
- request:
    method: post
    uri: https://acme-staging.api.letsencrypt.org/acme/reg/515213
    body:
      encoding: UTF-8
      string: '{"protected":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm5vbmNlIjoiQ0MxMFRxZGRUTWlCaFlEdk1ZOWtSVjVCZFZhUlpad1BZU0M4dEpDX1BoOCIsImp3ayI6eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsIm4iOiJ5bWpzRS0xdGNkVEdjaUEtT2lrcFlRbk8wMkpaNEt3ZlB3NFVkQUxIOFB2dThDZ05TQTJMeDM1NF9ibFUyQUlWbk0taGlWTjQzcHlac0w0NWFibmJJTXRvR0c2dHBHaU9hRGZ2V0J1V2dndTlaeXFCeUgydXVIWXRIR3QyakdTNEhyMi1pVjdva216amc2VEJQT2F5cG15ZmE1UExMbGFtai00Njl4QkZQdlpiUXZGMGQ4RXJOQUh2MmNtbFUwY2xBUmNIeHBQdUFyZzJ3eTMtb3ZKYjdRRWNxN29LZDgxTXZmNFVnVnVkbVN2djNvOERPZDQ4ajRDM056MHk2NzR3MmpCbDFMdThLM2tpVTdmamE1M3VURkZGeDk3aWFyODczXzc0VFB1clZOeXJSQVR0eUNjV1ZQWVZ2ZE5YTVN4OUNGUHRWSDZJbGZib1duckVzTUoxYXFmX04xWHZuaEl4WjRMZERTTzBmZ2FSTW5rU09tRFluUWFZbldOTmRKd2xvLXg3TXM2a3J5SE9yNmVNa0xrWU1pU0EwTWFPd21yOGN6ejk2VWxNX01Tdzc4SE5vbzRhRkw2SFQtMVVDWVZKYWpXUnhHUE9CV3dIeExocnVwMjE0UmlzOGxJSENXSEczQzRmWFIyMFhGRWdrajZPTTVwei1sempPcGZvbk1BTU9IUnc1M3RHSklodlFISHhyUC1QREZZc01RWTlxWVdncjRybEJQRUVyN2t3UkVjRTlDYS1kLUhwNjhkX0tnRUhrUjAwS2dPOWYweER3VkZhcHhxaGNtTGF3alRPUVdFdkRJbC13Wm9QM2tFVFlNeTA5bm5YN1dieDZOcVBPbzh3RTVnU1NKWlNtSC1nS0F5YVBYN0hMNmhTN203d0w1ZFQ4Z0doZ3Z6ZmlZVSJ9fQ","payload":"eyJyZXNvdXJjZSI6InJlZyIsImFncmVlbWVudCI6Imh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL2RvY3VtZW50cy9MRS1TQS12MS4xLjEtQXVndXN0LTEtMjAxNi5wZGYifQ","signature":"GMttEM2sWjUYQiRtJpIAS00uCEQX1ciQ1wGVQpS9IGrxx5hCcKXr4BZSSO_DJFzaFzpWGByb8PgNzOmkn1XJ2wzeiPbNt9xNH3Za-1syzAnAH5Lv75Rt-uvgpWrxVG-g5FUZH45_3RuWN9j8DLgVvqQuomEb7YAVbbxEErt6WMZ5tVSYvpAYLjaD7O5K2AHfjb_U2bOPs6UTqdNsbu65uak9YwodcqQ-89IIGBUr-UWSv5GWzc59PukcE--71QwNOMtU1JpqiJl2eHWzDvRC1krHtcz6bQyUg65STRW8b-lklu5gCwdjXAjm19YKHY-G_wuRWNxPhzhPyCSA5t_xct7NdWIW2s-9dHEgWjhFlT3MiMIJ3ccoH1Q5oojSyiexcGmq_rDOsLqNqRa-xwp_9W1Bg11pNIiFdbDLs7w1wZ9pZIWS-4UQTJljaXhCJ2_uDmFfu1z2H1YFmVHLDa2DO6gGAyINySH62ve5ViBoe8SCEUtGOhbZhvPEHep2ipKENLI9YSRMx_r6-g1-17PACk7JLREpx-J8oq80vmQmLqa-jeGJtj3drPnO0ODn-CEk0dxod_fw9hs8EwMuuDBje9-pGpjnKmkAEJItuRoVqTbOzMTGgsJFu0z0UrQsgteLmYQBw3x35y5OIDI8OrLkVjQ6xAcmsZTaNxqC21-HYQk"}'
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
  response:
    status:
      code: 202
      message: Accepted
    headers:
      Server:
      - nginx
      Content-Type:
      - application/json
      Content-Length:
      - '985'
      Boulder-Request-Id:
      - u0sJri58wlez9J8BkQ899P5s1Q2gqidfuUb0QBv0Wuw
      Boulder-Requester:
      - '515213'
      Link:
      - <https://acme-staging.api.letsencrypt.org/acme/new-authz>;rel="next"
      - <https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf>;rel="terms-of-service"
      Replay-Nonce:
      - AMmjdD5_Oa48OZRwqc9dteB3f7ixJvu1HrJPIvoL3XM
      Expires:
      - Fri, 25 Nov 2016 19:30:38 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Fri, 25 Nov 2016 19:30:38 GMT
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: |-
        {
          "id": 515213,
          "key": {
            "kty": "RSA",
            "n": "ymjsE-1tcdTGciA-OikpYQnO02JZ4KwfPw4UdALH8Pvu8CgNSA2Lx354_blU2AIVnM-hiVN43pyZsL45abnbIMtoGG6tpGiOaDfvWBuWggu9ZyqByH2uuHYtHGt2jGS4Hr2-iV7okmzjg6TBPOaypmyfa5PLLlamj-469xBFPvZbQvF0d8ErNAHv2cmlU0clARcHxpPuArg2wy3-ovJb7QEcq7oKd81Mvf4UgVudmSvv3o8DOd48j4C3Nz0y674w2jBl1Lu8K3kiU7fja53uTFFFx97iar873_74TPurVNyrRATtyCcWVPYVvdNXMSx9CFPtVH6IlfboWnrEsMJ1aqf_N1XvnhIxZ4LdDSO0fgaRMnkSOmDYnQaYnWNNdJwlo-x7Ms6kryHOr6eMkLkYMiSA0MaOwmr8czz96UlM_MSw78HNoo4aFL6HT-1UCYVJajWRxGPOBWwHxLhrup214Ris8lIHCWHG3C4fXR20XFEgkj6OM5pz-lzjOpfonMAMOHRw53tGJIhvQHHxrP-PDFYsMQY9qYWgr4rlBPEEr7kwREcE9Ca-d-Hp68d_KgEHkR00KgO9f0xDwVFapxqhcmLawjTOQWEvDIl-wZoP3kETYMy09nnX7Wbx6NqPOo8wE5gSSJZSmH-gKAyaPX7HL6hS7m7wL5dT8gGhgvzfiYU",
            "e": "AQAB"
          },
          "contact": [
            "mailto:max@substrakt.com"
          ],
          "agreement": "https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf",
          "initialIp": "82.43.101.135",
          "createdAt": "2016-11-25T19:30:37Z",
          "Status": ""
        }
    http_version: 
  recorded_at: Fri, 25 Nov 2016 19:30:38 GMT
- request:
    method: post
    uri: https://acme-staging.api.letsencrypt.org/acme/new-authz
    body:
      encoding: UTF-8
      string: '{"protected":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm5vbmNlIjoiQU1tamRENV9PYTQ4T1pSd3FjOWR0ZUIzZjdpeEp2dTFIckpQSXZvTDNYTSIsImp3ayI6eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsIm4iOiJ5bWpzRS0xdGNkVEdjaUEtT2lrcFlRbk8wMkpaNEt3ZlB3NFVkQUxIOFB2dThDZ05TQTJMeDM1NF9ibFUyQUlWbk0taGlWTjQzcHlac0w0NWFibmJJTXRvR0c2dHBHaU9hRGZ2V0J1V2dndTlaeXFCeUgydXVIWXRIR3QyakdTNEhyMi1pVjdva216amc2VEJQT2F5cG15ZmE1UExMbGFtai00Njl4QkZQdlpiUXZGMGQ4RXJOQUh2MmNtbFUwY2xBUmNIeHBQdUFyZzJ3eTMtb3ZKYjdRRWNxN29LZDgxTXZmNFVnVnVkbVN2djNvOERPZDQ4ajRDM056MHk2NzR3MmpCbDFMdThLM2tpVTdmamE1M3VURkZGeDk3aWFyODczXzc0VFB1clZOeXJSQVR0eUNjV1ZQWVZ2ZE5YTVN4OUNGUHRWSDZJbGZib1duckVzTUoxYXFmX04xWHZuaEl4WjRMZERTTzBmZ2FSTW5rU09tRFluUWFZbldOTmRKd2xvLXg3TXM2a3J5SE9yNmVNa0xrWU1pU0EwTWFPd21yOGN6ejk2VWxNX01Tdzc4SE5vbzRhRkw2SFQtMVVDWVZKYWpXUnhHUE9CV3dIeExocnVwMjE0UmlzOGxJSENXSEczQzRmWFIyMFhGRWdrajZPTTVwei1sempPcGZvbk1BTU9IUnc1M3RHSklodlFISHhyUC1QREZZc01RWTlxWVdncjRybEJQRUVyN2t3UkVjRTlDYS1kLUhwNjhkX0tnRUhrUjAwS2dPOWYweER3VkZhcHhxaGNtTGF3alRPUVdFdkRJbC13Wm9QM2tFVFlNeTA5bm5YN1dieDZOcVBPbzh3RTVnU1NKWlNtSC1nS0F5YVBYN0hMNmhTN203d0w1ZFQ4Z0doZ3Z6ZmlZVSJ9fQ","payload":"eyJyZXNvdXJjZSI6Im5ldy1hdXRoeiIsImlkZW50aWZpZXIiOnsidHlwZSI6ImRucyIsInZhbHVlIjoid3d3LnN1YnN0cmFrdC5jb20ifX0","signature":"tgWE9NeFf9csc04e7qNlH11Nzve_ZGKOnK5eIN6lNDEDU_zHXngvnNC2wKYzzKosgu_iafRfut1yNr8cAoFtx_J3c6XRahi4UOm4eQ6sID5f1lBlkqwik_VAluZgWnQ5KB8ciRePn4xZVtWZlm5jKrZgoW3z_JIFloAoguC_IGIJQJXVBUpagwinTvo9saaDF5ajuU5NgLyDvXVhrQExbQ38vW0xMjgLghiJkQ8PYnpcbieBsgeeKGdE1pwUzdQIdGggMZUbxMnr_6ReUBg6-Q5t2_CkSRa777vyNNTW3WYZTpbGi8PaTfFJBW9maGgKx7cUHsDgfYp8A1-6EnMGe5XpINyyzr7YN5tMj76EGU2TUeelPx96lLw24YsI-X9qE67sQLqdrncB3j3277ZOK6_W6K94z_4q6BDS4AWKk0xVQQRFDVpeBBC2F_6fCJaC2ejNxtawaniyyLqXUIhg1AxEDaUJR2_CDIzMf6vEuieepbjyVN1VjYEUXSEQfTxD8_m94qgutkCn1uhmsWjsRdCk_ZdLow7_zedSFZmpTlPlhphyae1kekhh9r5eojFBw1intiBMfo0iNVk7lk3hukHMz-IvqERIeXdFnM9uMWPmPjdzxpcNQ8EzEgRCEo2ITbF0nXQRFlPFwaDGOXrxeTlmGKKF5SHQurwaV6VVnqU"}'
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
  response:
    status:
      code: 201
      message: Created
    headers:
      Server:
      - nginx
      Content-Type:
      - application/json
      Content-Length:
      - '1011'
      Boulder-Request-Id:
      - Y47ADtlB5pMYpr8XnJUat3ZAdCRuvhAFymIcUqebkD0
      Boulder-Requester:
      - '515213'
      Link:
      - <https://acme-staging.api.letsencrypt.org/acme/new-cert>;rel="next"
      Location:
      - https://acme-staging.api.letsencrypt.org/acme/authz/PsI-t7YLKt1WQQ5P173ExztDs9mnf3pbAbvMZ8yPPKQ
      Replay-Nonce:
      - 7EIdYQAgpPl80t7a6WyJpEQuLlXbMamq4kblbgJ8q_s
      X-Frame-Options:
      - DENY
      Strict-Transport-Security:
      - max-age=604800
      Expires:
      - Fri, 25 Nov 2016 19:30:38 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Fri, 25 Nov 2016 19:30:38 GMT
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: |-
        {
          "identifier": {
            "type": "dns",
            "value": "www.substrakt.com"
          },
          "status": "pending",
          "expires": "2016-12-02T19:30:38.580058804Z",
          "challenges": [
            {
              "type": "dns-01",
              "status": "pending",
              "uri": "https://acme-staging.api.letsencrypt.org/acme/challenge/PsI-t7YLKt1WQQ5P173ExztDs9mnf3pbAbvMZ8yPPKQ/17254940",
              "token": "OdYWiVDujvpnaASua9Fl6rCiDJApS3DcAIIAZ1096Fk"
            },
            {
              "type": "tls-sni-01",
              "status": "pending",
              "uri": "https://acme-staging.api.letsencrypt.org/acme/challenge/PsI-t7YLKt1WQQ5P173ExztDs9mnf3pbAbvMZ8yPPKQ/17254941",
              "token": "QdOO3Z23iQ2Z1ZAZJo1j18MEEMvHTICNxw2XFBGdmq4"
            },
            {
              "type": "http-01",
              "status": "pending",
              "uri": "https://acme-staging.api.letsencrypt.org/acme/challenge/PsI-t7YLKt1WQQ5P173ExztDs9mnf3pbAbvMZ8yPPKQ/17254942",
              "token": "w7Jw-MRLx7D2niAq_9a_n-0_dUGJqBAecGap-xXZMAI"
            }
          ],
          "combinations": [
            [
              1
            ],
            [
              0
            ],
            [
              2
            ]
          ]
        }
    http_version: 
  recorded_at: Fri, 25 Nov 2016 19:30:38 GMT
- request:
    method: post
    uri: https://acme-staging.api.letsencrypt.org/acme/new-authz
    body:
      encoding: UTF-8
      string: '{"protected":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm5vbmNlIjoiN0VJZFlRQWdwUGw4MHQ3YTZXeUpwRVF1TGxYYk1hbXE0a2JsYmdKOHFfcyIsImp3ayI6eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsIm4iOiJ5bWpzRS0xdGNkVEdjaUEtT2lrcFlRbk8wMkpaNEt3ZlB3NFVkQUxIOFB2dThDZ05TQTJMeDM1NF9ibFUyQUlWbk0taGlWTjQzcHlac0w0NWFibmJJTXRvR0c2dHBHaU9hRGZ2V0J1V2dndTlaeXFCeUgydXVIWXRIR3QyakdTNEhyMi1pVjdva216amc2VEJQT2F5cG15ZmE1UExMbGFtai00Njl4QkZQdlpiUXZGMGQ4RXJOQUh2MmNtbFUwY2xBUmNIeHBQdUFyZzJ3eTMtb3ZKYjdRRWNxN29LZDgxTXZmNFVnVnVkbVN2djNvOERPZDQ4ajRDM056MHk2NzR3MmpCbDFMdThLM2tpVTdmamE1M3VURkZGeDk3aWFyODczXzc0VFB1clZOeXJSQVR0eUNjV1ZQWVZ2ZE5YTVN4OUNGUHRWSDZJbGZib1duckVzTUoxYXFmX04xWHZuaEl4WjRMZERTTzBmZ2FSTW5rU09tRFluUWFZbldOTmRKd2xvLXg3TXM2a3J5SE9yNmVNa0xrWU1pU0EwTWFPd21yOGN6ejk2VWxNX01Tdzc4SE5vbzRhRkw2SFQtMVVDWVZKYWpXUnhHUE9CV3dIeExocnVwMjE0UmlzOGxJSENXSEczQzRmWFIyMFhGRWdrajZPTTVwei1sempPcGZvbk1BTU9IUnc1M3RHSklodlFISHhyUC1QREZZc01RWTlxWVdncjRybEJQRUVyN2t3UkVjRTlDYS1kLUhwNjhkX0tnRUhrUjAwS2dPOWYweER3VkZhcHhxaGNtTGF3alRPUVdFdkRJbC13Wm9QM2tFVFlNeTA5bm5YN1dieDZOcVBPbzh3RTVnU1NKWlNtSC1nS0F5YVBYN0hMNmhTN203d0w1ZFQ4Z0doZ3Z6ZmlZVSJ9fQ","payload":"eyJyZXNvdXJjZSI6Im5ldy1hdXRoeiIsImlkZW50aWZpZXIiOnsidHlwZSI6ImRucyIsInZhbHVlIjoic3Vic3RyYWt0LmNvbSJ9fQ","signature":"eRyNJRqS15nHJODd07cdMhap61gRF-jt9dEfDChULpHx04drcLknO-QgrhFxMl3TbVFTD5gYE9nzIMa_GdqrRKPuvnRDkM9eSPNx9oVy-IAhB_qirFlgP4xdXntP4vUnezNJJFfad6SRRVf-lI1Y7gGXPJadrWzHLFIYlkVNHZos5UoFs5ohrU_YLu72c4KznkLwQQ3Sx3Rybug6RVpm_D8tn_YE8zmO3jhCfKfBTRkXOX8krFsQ0YbPAPgY6ktt28_dlYWDzdwXH587ZuR4iqxm8j9mYxm4SpwomWd_oYmQ-Kkup-ALz-49QsE4GNm0ASwiLNdHMvXdtlr-GaTSQjjU8hxqM-8VY0Tc5W2Lq_RKbUVB7KXJ-8I8ux_B-3Nj7GFaWcnB14ktwmPwig5QAWDXNOf2H0RYJ3hGgrRp-8J7UA6SdxuoUBRQFbpP0ijwnozthPofMYfLoyauFQO-Dgpo167GpySItOCqFgWQ1BMpEnEr_cPDIxXcvbAtcinReGsxsKpzE_sjyPU4l69CMf0HaAMuC-W0cFJrLTmN-8aBFrIeihHImTKPukdZstctc1iWEyWYJSJnH5L5U0KHWX3Ie4P3p2v0xw9Pgydr8xDtVZXT5_zoQsmG1ytFr7Y6yPDFbnOWe4Wqa1sDWI8P-VQO4ILbnC4xX9A4AeI6bKM"}'
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
  response:
    status:
      code: 201
      message: Created
    headers:
      Server:
      - nginx
      Content-Type:
      - application/json
      Content-Length:
      - '1007'
      Boulder-Request-Id:
      - HvKER6RSqCJMtUKjMPVblDq-WvFhREpzXVVF4zzqIPw
      Boulder-Requester:
      - '515213'
      Link:
      - <https://acme-staging.api.letsencrypt.org/acme/new-cert>;rel="next"
      Location:
      - https://acme-staging.api.letsencrypt.org/acme/authz/fQRt7uMWq2TGQUU5dVlHK2RuUgWkTOLVQazMSm6an84
      Replay-Nonce:
      - W63wY-o1CjuMizgDi056Jn2SW6954CEER3CUrGALmU8
      X-Frame-Options:
      - DENY
      Strict-Transport-Security:
      - max-age=604800
      Expires:
      - Fri, 25 Nov 2016 19:30:39 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Fri, 25 Nov 2016 19:30:39 GMT
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: |-
        {
          "identifier": {
            "type": "dns",
            "value": "substrakt.com"
          },
          "status": "pending",
          "expires": "2016-12-02T19:30:39.097675028Z",
          "challenges": [
            {
              "type": "tls-sni-01",
              "status": "pending",
              "uri": "https://acme-staging.api.letsencrypt.org/acme/challenge/fQRt7uMWq2TGQUU5dVlHK2RuUgWkTOLVQazMSm6an84/17254943",
              "token": "CYrZ08xeIfrh8Q13m3RiBS2E-occ2VNT9HYmPhBL9u4"
            },
            {
              "type": "http-01",
              "status": "pending",
              "uri": "https://acme-staging.api.letsencrypt.org/acme/challenge/fQRt7uMWq2TGQUU5dVlHK2RuUgWkTOLVQazMSm6an84/17254944",
              "token": "uqVTEgTU8Ti9gDGCyQiD9MHc9hdx1LCTLg3jdwtp3sk"
            },
            {
              "type": "dns-01",
              "status": "pending",
              "uri": "https://acme-staging.api.letsencrypt.org/acme/challenge/fQRt7uMWq2TGQUU5dVlHK2RuUgWkTOLVQazMSm6an84/17254945",
              "token": "nagb5O4bMZ5QiumOTmYOLKp36FfIZcr-Mw6rtGlZO38"
            }
          ],
          "combinations": [
            [
              0
            ],
            [
              2
            ],
            [
              1
            ]
          ]
        }
    http_version: 
  recorded_at: Fri, 25 Nov 2016 19:30:39 GMT
- request:
    method: post
    uri: https://www.cloudflare.com/api_json.html
    body:
      encoding: US-ASCII
      string: a=rec_new&z=substrakt.com&type=TXT&name=_acme-challenge.www.substrakt.com&content=o_FTGsFdaIdXA7x_tFXYXdgjI12mrmsj4C3OJVUEejM&ttl=1&service_mode=1&tkn=49029fecd405689687af84b77176e344c8259&u=max%40substrakt.com
    headers:
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
      User-Agent:
      - Ruby
      Content-Type:
      - application/x-www-form-urlencoded
  response:
    status:
      code: 200
      message: OK
    headers:
      Date:
      - Fri, 25 Nov 2016 19:30:41 GMT
      Content-Type:
      - application/json
      Transfer-Encoding:
      - chunked
      Connection:
      - keep-alive
      Set-Cookie:
      - CF_UALE=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0
      - __cfduid=dae5db3f5643e064b088503e80f8285c01480102240; expires=Sat, 25-Nov-17
        19:30:40 GMT; path=/; domain=.cloudflare.com; HttpOnly
      - vses2=7fh9shnf23far48mb7ms7k7ta1; path=/; domain=www.cloudflare.com; secure;
        HttpOnly
      Expires:
      - Thu, 19 Nov 1981 08:52:00 GMT
      Cache-Control:
      - no-store, no-cache, must-revalidate, post-check=0, pre-check=0
      Pragma:
      - no-cache
      Strict-Transport-Security:
      - max-age=31536000
      X-Content-Type-Options:
      - nosniff
      X-Frame-Options:
      - SAMEORIGIN
      Content-Security-Policy:
      - default-src 'self' https://*; script-src 'self' 'unsafe-inline' 'unsafe-eval'
        https://* data:; img-src 'self' https://* data:; style-src 'self' 'unsafe-inline'
        https://*; font-src 'self' https://* data:; frame-src https://*; connect-src
        'self' https://* wss://*.zopim.com data:;
      X-Xss-Protection:
      - 1; mode=block
      Server:
      - cloudflare-nginx
      Cf-Ray:
      - 3077843a6b4c0cb9-LHR
    body:
      encoding: ASCII-8BIT
      string: '{"request":{"act":"rec_new"},"response":{"rec":{"obj":{"rec_id":"669350809","rec_hash":"56d1246c6e888c25fc0b74fdace90c1a","zone_name":"substrakt.com","name":"_acme-challenge.www.substrakt.com","display_name":"_acme-challenge.www","type":"TXT","prio":null,"content":"o_FTGsFdaIdXA7x_tFXYXdgjI12mrmsj4C3OJVUEejM","display_content":"o_FTGsFdaIdXA7x_tFXYXdgjI12mrmsj4C3OJVUEejM","ttl":"1","ttl_ceil":86400,"ssl_id":"5084311","ssl_status":"V","ssl_expires_on":null,"auto_ttl":1,"service_mode":"0","props":{"proxiable":0,"cloud_on":0,"cf_open":1,"vanity_lock":0,"ssl":1,"expired_ssl":0,"expiring_ssl":0,"pending_ssl":0}}}},"result":"success","msg":null}'
    http_version: 
  recorded_at: Fri, 25 Nov 2016 19:30:41 GMT
- request:
    method: post
    uri: https://www.cloudflare.com/api_json.html
    body:
      encoding: US-ASCII
      string: a=rec_new&z=substrakt.com&type=TXT&name=_acme-challenge.substrakt.com&content=YT-qkPZCDU2NGDMA3hkgw6e9H9FeF4ugqb7zab6HACg&ttl=1&service_mode=1&tkn=49029fecd405689687af84b77176e344c8259&u=max%40substrakt.com
    headers:
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
      User-Agent:
      - Ruby
      Content-Type:
      - application/x-www-form-urlencoded
  response:
    status:
      code: 200
      message: OK
    headers:
      Date:
      - Fri, 25 Nov 2016 19:30:42 GMT
      Content-Type:
      - application/json
      Transfer-Encoding:
      - chunked
      Connection:
      - keep-alive
      Set-Cookie:
      - CF_UALE=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0
      - __cfduid=de3ee193c59db00d8b892fd42b5585bd21480102241; expires=Sat, 25-Nov-17
        19:30:41 GMT; path=/; domain=.cloudflare.com; HttpOnly
      - vses2=br19slkmamp12tmftmq608r364; path=/; domain=www.cloudflare.com; secure;
        HttpOnly
      Expires:
      - Thu, 19 Nov 1981 08:52:00 GMT
      Cache-Control:
      - no-store, no-cache, must-revalidate, post-check=0, pre-check=0
      Pragma:
      - no-cache
      Strict-Transport-Security:
      - max-age=31536000
      X-Content-Type-Options:
      - nosniff
      X-Frame-Options:
      - SAMEORIGIN
      Content-Security-Policy:
      - default-src 'self' https://*; script-src 'self' 'unsafe-inline' 'unsafe-eval'
        https://* data:; img-src 'self' https://* data:; style-src 'self' 'unsafe-inline'
        https://*; font-src 'self' https://* data:; frame-src https://*; connect-src
        'self' https://* wss://*.zopim.com data:;
      X-Xss-Protection:
      - 1; mode=block
      Server:
      - cloudflare-nginx
      Cf-Ray:
      - 307784402e8206ee-LHR
    body:
      encoding: ASCII-8BIT
      string: '{"request":{"act":"rec_new"},"response":{"rec":{"obj":{"rec_id":"669350815","rec_hash":"17ffb0cf99af43dbe0764a3cf15134c8","zone_name":"substrakt.com","name":"_acme-challenge.substrakt.com","display_name":"_acme-challenge","type":"TXT","prio":null,"content":"YT-qkPZCDU2NGDMA3hkgw6e9H9FeF4ugqb7zab6HACg","display_content":"YT-qkPZCDU2NGDMA3hkgw6e9H9FeF4ugqb7zab6HACg","ttl":"1","ttl_ceil":86400,"ssl_id":"5084311","ssl_status":"V","ssl_expires_on":null,"auto_ttl":1,"service_mode":"0","props":{"proxiable":0,"cloud_on":0,"cf_open":1,"vanity_lock":0,"ssl":1,"expired_ssl":0,"expiring_ssl":0,"pending_ssl":0}}}},"result":"success","msg":null}'
    http_version: 
  recorded_at: Fri, 25 Nov 2016 19:30:42 GMT
- request:
    method: post
    uri: https://acme-staging.api.letsencrypt.org/acme/challenge/PsI-t7YLKt1WQQ5P173ExztDs9mnf3pbAbvMZ8yPPKQ/17254940
    body:
      encoding: UTF-8
      string: '{"protected":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm5vbmNlIjoiVzYzd1ktbzFDanVNaXpnRGkwNTZKbjJTVzY5NTRDRUVSM0NVckdBTG1VOCIsImp3ayI6eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsIm4iOiJ5bWpzRS0xdGNkVEdjaUEtT2lrcFlRbk8wMkpaNEt3ZlB3NFVkQUxIOFB2dThDZ05TQTJMeDM1NF9ibFUyQUlWbk0taGlWTjQzcHlac0w0NWFibmJJTXRvR0c2dHBHaU9hRGZ2V0J1V2dndTlaeXFCeUgydXVIWXRIR3QyakdTNEhyMi1pVjdva216amc2VEJQT2F5cG15ZmE1UExMbGFtai00Njl4QkZQdlpiUXZGMGQ4RXJOQUh2MmNtbFUwY2xBUmNIeHBQdUFyZzJ3eTMtb3ZKYjdRRWNxN29LZDgxTXZmNFVnVnVkbVN2djNvOERPZDQ4ajRDM056MHk2NzR3MmpCbDFMdThLM2tpVTdmamE1M3VURkZGeDk3aWFyODczXzc0VFB1clZOeXJSQVR0eUNjV1ZQWVZ2ZE5YTVN4OUNGUHRWSDZJbGZib1duckVzTUoxYXFmX04xWHZuaEl4WjRMZERTTzBmZ2FSTW5rU09tRFluUWFZbldOTmRKd2xvLXg3TXM2a3J5SE9yNmVNa0xrWU1pU0EwTWFPd21yOGN6ejk2VWxNX01Tdzc4SE5vbzRhRkw2SFQtMVVDWVZKYWpXUnhHUE9CV3dIeExocnVwMjE0UmlzOGxJSENXSEczQzRmWFIyMFhGRWdrajZPTTVwei1sempPcGZvbk1BTU9IUnc1M3RHSklodlFISHhyUC1QREZZc01RWTlxWVdncjRybEJQRUVyN2t3UkVjRTlDYS1kLUhwNjhkX0tnRUhrUjAwS2dPOWYweER3VkZhcHhxaGNtTGF3alRPUVdFdkRJbC13Wm9QM2tFVFlNeTA5bm5YN1dieDZOcVBPbzh3RTVnU1NKWlNtSC1nS0F5YVBYN0hMNmhTN203d0w1ZFQ4Z0doZ3Z6ZmlZVSJ9fQ","payload":"eyJyZXNvdXJjZSI6ImNoYWxsZW5nZSIsInR5cGUiOiJkbnMtMDEiLCJrZXlBdXRob3JpemF0aW9uIjoiT2RZV2lWRHVqdnBuYUFTdWE5Rmw2ckNpREpBcFMzRGNBSUlBWjEwOTZGay4wMlFKUWZiVFphTFZIV0Fnc3VibnlTUUk3Xzd3SElLQXNYMG12bXVfZEFRIn0","signature":"tIUTE4UZPWNLqNoqC3psu-SUX6CQmkVBxpGe0SouryQWefbolsh4FqL37nVGSIf0hpHsrnucQi9WPpRPO4p29Ua2HMwFEZOKZ0derKCZnqNIEeyKINHqM-NU4Z7P99cfto6OyF6XxRzPCXbkM9ZGOjkjr8Ufs2_Cdn_iYo48-B4C9pANaX99lqilaOqut-jWNYJ1ilJyvfuDZWl2oYTI8p-0fxv2mNgQoIvOSGzRqsFweEHqPh1kINGgqbX95ewpHwFNrQT8Y4jjACx9GwTS9_J_bZYu-3POmhbsLCs1NcmUfYVipnTOSVEGw0BncZlECFkM_xr_NL7XBnX63y8gS0NYYH3jlk_rCnAcmDkmSS4HHSK9AbcI7rEYC1mmtg4uxFgHhj43KrM-aRYyMaLP3lN_oQyEQoOHpcwjQ8t4lOGEE-RG5bfZYnOVq27FgE6l3xK4KpenM--3ZYATE0Sk7vvMiR8nki9xdm8cBaPEoJPd3x7Du0EeQPDntWe14rVhnkR_O3ew8xlSoGYa_OmZtbsRaPfc03ItklUp3gBy7ut28XyYWS5AKviIquANtg9pYxz_2t_puVBIz_9xwUEjhibsV3_Byyp7laG8JpoJAwZgLHa0AbDHz_KyBsqTDSlt8wXOyn7K8EJ5nQWPgHoioh37wJe1m-zd6Td5Fsd44Lw"}'
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
  response:
    status:
      code: 202
      message: Accepted
    headers:
      Server:
      - nginx
      Content-Type:
      - application/json
      Content-Length:
      - '337'
      Boulder-Request-Id:
      - 8fme7b_hOsHezipfdi3UlNn33DlNAAs2fX3Kk3CU4CA
      Boulder-Requester:
      - '515213'
      Link:
      - <https://acme-staging.api.letsencrypt.org/acme/authz/PsI-t7YLKt1WQQ5P173ExztDs9mnf3pbAbvMZ8yPPKQ>;rel="up"
      Location:
      - https://acme-staging.api.letsencrypt.org/acme/challenge/PsI-t7YLKt1WQQ5P173ExztDs9mnf3pbAbvMZ8yPPKQ/17254940
      Replay-Nonce:
      - G6FOhng_d8iQ0YyGUG005F19uoZSjChjHmxi8Na_T0E
      Expires:
      - Fri, 25 Nov 2016 19:31:42 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Fri, 25 Nov 2016 19:31:42 GMT
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: |-
        {
          "type": "dns-01",
          "status": "pending",
          "uri": "https://acme-staging.api.letsencrypt.org/acme/challenge/PsI-t7YLKt1WQQ5P173ExztDs9mnf3pbAbvMZ8yPPKQ/17254940",
          "token": "OdYWiVDujvpnaASua9Fl6rCiDJApS3DcAIIAZ1096Fk",
          "keyAuthorization": "OdYWiVDujvpnaASua9Fl6rCiDJApS3DcAIIAZ1096Fk.02QJQfbTZaLVHWAgsubnySQI7_7wHIKAsX0mvmu_dAQ"
        }
    http_version: 
  recorded_at: Fri, 25 Nov 2016 19:31:42 GMT
- request:
    method: post
    uri: https://acme-staging.api.letsencrypt.org/acme/challenge/fQRt7uMWq2TGQUU5dVlHK2RuUgWkTOLVQazMSm6an84/17254945
    body:
      encoding: UTF-8
      string: '{"protected":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm5vbmNlIjoiRzZGT2huZ19kOGlRMFl5R1VHMDA1RjE5dW9aU2pDaGpIbXhpOE5hX1QwRSIsImp3ayI6eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsIm4iOiJ5bWpzRS0xdGNkVEdjaUEtT2lrcFlRbk8wMkpaNEt3ZlB3NFVkQUxIOFB2dThDZ05TQTJMeDM1NF9ibFUyQUlWbk0taGlWTjQzcHlac0w0NWFibmJJTXRvR0c2dHBHaU9hRGZ2V0J1V2dndTlaeXFCeUgydXVIWXRIR3QyakdTNEhyMi1pVjdva216amc2VEJQT2F5cG15ZmE1UExMbGFtai00Njl4QkZQdlpiUXZGMGQ4RXJOQUh2MmNtbFUwY2xBUmNIeHBQdUFyZzJ3eTMtb3ZKYjdRRWNxN29LZDgxTXZmNFVnVnVkbVN2djNvOERPZDQ4ajRDM056MHk2NzR3MmpCbDFMdThLM2tpVTdmamE1M3VURkZGeDk3aWFyODczXzc0VFB1clZOeXJSQVR0eUNjV1ZQWVZ2ZE5YTVN4OUNGUHRWSDZJbGZib1duckVzTUoxYXFmX04xWHZuaEl4WjRMZERTTzBmZ2FSTW5rU09tRFluUWFZbldOTmRKd2xvLXg3TXM2a3J5SE9yNmVNa0xrWU1pU0EwTWFPd21yOGN6ejk2VWxNX01Tdzc4SE5vbzRhRkw2SFQtMVVDWVZKYWpXUnhHUE9CV3dIeExocnVwMjE0UmlzOGxJSENXSEczQzRmWFIyMFhGRWdrajZPTTVwei1sempPcGZvbk1BTU9IUnc1M3RHSklodlFISHhyUC1QREZZc01RWTlxWVdncjRybEJQRUVyN2t3UkVjRTlDYS1kLUhwNjhkX0tnRUhrUjAwS2dPOWYweER3VkZhcHhxaGNtTGF3alRPUVdFdkRJbC13Wm9QM2tFVFlNeTA5bm5YN1dieDZOcVBPbzh3RTVnU1NKWlNtSC1nS0F5YVBYN0hMNmhTN203d0w1ZFQ4Z0doZ3Z6ZmlZVSJ9fQ","payload":"eyJyZXNvdXJjZSI6ImNoYWxsZW5nZSIsInR5cGUiOiJkbnMtMDEiLCJrZXlBdXRob3JpemF0aW9uIjoibmFnYjVPNGJNWjVRaXVtT1RtWU9MS3AzNkZmSVpjci1NdzZydEdsWk8zOC4wMlFKUWZiVFphTFZIV0Fnc3VibnlTUUk3Xzd3SElLQXNYMG12bXVfZEFRIn0","signature":"XE2AlYAbiRD61cEZ1cxnaCuy5zCMGUhmkQ1dhyK4faUJzJtkau9Oo45IKrVxoitze_ykzF6HpkReJcBY_U1JIyNgWJZ050zPIac-jztss6AsmhDJ1YyWUidyTY8lzGuY-WeU7Ji8Sv3dxrTXxrFL9Qb2L4Ah3oX4Nev9Hq3Jp65oxyOIKOBsKx4Fx1hxCHg7FtT1DUhb2XAA5RRPyscD9p6r3vNWUkQaZQrMlq_y8wZ62SHGFe0KSXbTuZx7D3JlU8n24HsHXfk51kBNZvslT59tJUaz3K6NL62khMUnLOzaETYBLj2PHXgfsL3-xaLZhh33iKfUb6-RrxExif3MxNRGMvaF1IZZKA3Ss56vmVbu4gI5cNSECf9g5Fl4fuMZ732e9YEfyc1M0IIwgIiqOT2I0hMhkCOdptZvgGkMmigEG9-9WSs-9UPZDs4JlWFJ3_SHANvnAK_5J_w0Md7-RSeshe_FSKaTrj61OyWGae4cEes4CGSKqr7jYvJLJ_GRUYPXQqezhDRNrj9-BDBOItjKJ3mjRhkUcgXU5ui4R-5TlHb3khxPLvs-2y-IIckplUsJByaiJV6JX9gF3-YQxH5JLxyNZKZ6OrPO4KZm6hRAGnRzzk7LPTpftJ1FjnVUbaDk7lu_ev13rnkQQPcE18aoFRrQMXE-9M1j9vseYKA"}'
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
  response:
    status:
      code: 202
      message: Accepted
    headers:
      Server:
      - nginx
      Content-Type:
      - application/json
      Content-Length:
      - '337'
      Boulder-Request-Id:
      - Awf5Ec1c1UNuSaTem3h03TBivPe-jhGMQuTxh8pHHEU
      Boulder-Requester:
      - '515213'
      Link:
      - <https://acme-staging.api.letsencrypt.org/acme/authz/fQRt7uMWq2TGQUU5dVlHK2RuUgWkTOLVQazMSm6an84>;rel="up"
      Location:
      - https://acme-staging.api.letsencrypt.org/acme/challenge/fQRt7uMWq2TGQUU5dVlHK2RuUgWkTOLVQazMSm6an84/17254945
      Replay-Nonce:
      - oEVupN5se6K2xODYry9dYwt9jb5NWe39wPYaDNPDXY4
      Expires:
      - Fri, 25 Nov 2016 19:31:43 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Fri, 25 Nov 2016 19:31:43 GMT
      Connection:
      - keep-alive
    body:
      encoding: UTF-8
      string: |-
        {
          "type": "dns-01",
          "status": "pending",
          "uri": "https://acme-staging.api.letsencrypt.org/acme/challenge/fQRt7uMWq2TGQUU5dVlHK2RuUgWkTOLVQazMSm6an84/17254945",
          "token": "nagb5O4bMZ5QiumOTmYOLKp36FfIZcr-Mw6rtGlZO38",
          "keyAuthorization": "nagb5O4bMZ5QiumOTmYOLKp36FfIZcr-Mw6rtGlZO38.02QJQfbTZaLVHWAgsubnySQI7_7wHIKAsX0mvmu_dAQ"
        }
    http_version: 
  recorded_at: Fri, 25 Nov 2016 19:31:43 GMT
- request:
    method: post
    uri: https://acme-staging.api.letsencrypt.org/acme/new-cert
    body:
      encoding: UTF-8
      string: '{"protected":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm5vbmNlIjoib0VWdXBONXNlNksyeE9EWXJ5OWRZd3Q5amI1TldlMzl3UFlhRE5QRFhZNCIsImp3ayI6eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsIm4iOiJ5bWpzRS0xdGNkVEdjaUEtT2lrcFlRbk8wMkpaNEt3ZlB3NFVkQUxIOFB2dThDZ05TQTJMeDM1NF9ibFUyQUlWbk0taGlWTjQzcHlac0w0NWFibmJJTXRvR0c2dHBHaU9hRGZ2V0J1V2dndTlaeXFCeUgydXVIWXRIR3QyakdTNEhyMi1pVjdva216amc2VEJQT2F5cG15ZmE1UExMbGFtai00Njl4QkZQdlpiUXZGMGQ4RXJOQUh2MmNtbFUwY2xBUmNIeHBQdUFyZzJ3eTMtb3ZKYjdRRWNxN29LZDgxTXZmNFVnVnVkbVN2djNvOERPZDQ4ajRDM056MHk2NzR3MmpCbDFMdThLM2tpVTdmamE1M3VURkZGeDk3aWFyODczXzc0VFB1clZOeXJSQVR0eUNjV1ZQWVZ2ZE5YTVN4OUNGUHRWSDZJbGZib1duckVzTUoxYXFmX04xWHZuaEl4WjRMZERTTzBmZ2FSTW5rU09tRFluUWFZbldOTmRKd2xvLXg3TXM2a3J5SE9yNmVNa0xrWU1pU0EwTWFPd21yOGN6ejk2VWxNX01Tdzc4SE5vbzRhRkw2SFQtMVVDWVZKYWpXUnhHUE9CV3dIeExocnVwMjE0UmlzOGxJSENXSEczQzRmWFIyMFhGRWdrajZPTTVwei1sempPcGZvbk1BTU9IUnc1M3RHSklodlFISHhyUC1QREZZc01RWTlxWVdncjRybEJQRUVyN2t3UkVjRTlDYS1kLUhwNjhkX0tnRUhrUjAwS2dPOWYweER3VkZhcHhxaGNtTGF3alRPUVdFdkRJbC13Wm9QM2tFVFlNeTA5bm5YN1dieDZOcVBPbzh3RTVnU1NKWlNtSC1nS0F5YVBYN0hMNmhTN203d0w1ZFQ4Z0doZ3Z6ZmlZVSJ9fQ","payload":"eyJyZXNvdXJjZSI6Im5ldy1jZXJ0IiwiY3NyIjoiTUlJQ256Q0NBWWNDQVFJd0hERWFNQmdHQTFVRUF3d1JkM2QzTG5OMVluTjBjbUZyZEM1amIyMHdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFDX25UNngtREl2akZSY05nTFNxbGJaOFZzVG9leE51X1BwZXc0T0JIclBSd0s4Zy1oMFVfNmdONWFiU2o2Q1JJdU4zaUVfXzVQZ1VwSnR3UV80SmJhRFpxS2FsWUhXc0VUeHI0bXZoQ0ZEN2kzRzdCdEhuQXJEZ1B2WUtacHVGVVdXNkxOMlFwVUhmNTdITmZyM0VER0loa1NsZlBlN0txbkxWZU5kTTJOZEZ2STB2WDZYLXBGU0NfeUJjV19yQ3B0bjJGc2EyR0d3eDRWenl3RGM3QzhpblJFTEMzY2QwTlRSeDQ2R2pxczgycEZYMF9rSWdpaDJWWEJma3hZaG5VQS1Vd1VhdzczTDFianBTMGtCTzNLWjdWY3NHa01YaTRvSV9SYWctVmpxU2hNaEFKeWdhdDFZTExKUWEyMjF1S3ZTQXA1Z3hIeU1Dcm9GdTNBcEZJaDFBZ01CQUFHZ1BqQThCZ2txaGtpRzl3MEJDUTR4THpBdE1Dc0dBMVVkRVFRa01DS0NFWGQzZHk1emRXSnpkSEpoYTNRdVkyOXRnZzF6ZFdKemRISmhhM1F1WTI5dE1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQjRYNTJiLWlwTjJfZkhFTXU5UUNWckNVaUE5Q0RjY2lVazQ4bjRrZGExM3ZkZ25kT2JoQUx0STdCOG1lWFlheFJaNnkyTk5xcWl5TkhjRWwtZ0NDblBTMzZxZ3g0eFl2Ym9lU0dkVDJXOEtHdG82aWVhdy1mNUFkNW02dVpFc0tOYlgzc3BmZjNybjVobThsQ09BeWtlOFU3dmFJdks1OW5aZktpUXR5REdfVXRwUlZoQ1RlUHAtdmlHNlRmVEczYmJiM1ppcm9MbVVla1BPZnhSTzJDTm8wZ2I1WDRWcTB2Vl9iZXlhRjEzVkRETGRDdnBQV1Bub3RJOEVSMUhyYzBfaTZqUG5jN3BpQ0Qya2FDRm5ldmMtYm1rQWljZUF1cERVOUtRMWtZWnl2X21DRlVnQ1J3MmlvSFltZko5dzF6UVNlNVFxc2JSSVhzYXdRaFJ5d3dFIn0","signature":"H4X-RI_Ii2FPvsJSzEutJCZ6YCRGUVjO_9mssX3akA7SkvPSSlwm7F3L6DJgvKKKXJEJ9ydtcjN9gQBvx9Kt69kHqYEySrSVJiYQsT5DfDIFfVRJ_GE57b3z5ESadLr-5bNfDfSFoBnREf8sNkJaV5q0iZkSDNBhcfv-EJakS9hh76_OWuWpjV6lnmSLajx4MuFWdCNtSCocwnT9qJYWOeB5RBiOspSwSgDpprF6wjn91AfyBzID-uuTCowcqYUVrDIU7ULUaGF-Id041aAhtgxY1HGM2vP8DqfcjMcg0Z1GaJNaiZNbUYiBlZ8FKchhYcz5tb54BIbfasdhJhI14H-_1fHe3tSZ56O8T33NG84t1OLnXu4d7l6FqzijY0EHulrHl6ogc4CHaf6tOaqFl0QE6WS4Z_reO0lzajfp30MeO56AGuL2A33Y84iMSBTqQBkNvsG-9B8rMrPmYgTca3EizjKHq6q6_rmQet7i5cbiCiSxHfIJAehg2YoZbjjrO2CHrOyoBt4exfWfuiN9ecKQ9zBywFNFyWnk3kGIO__-dbD5Ljp1iLilrOoRrWAHEL-qa5hIsEZ0eB5Hdkiu21-WGjG7G4Ooru2aXaYhRtnEYAMAnFrN0zH-MLPJlEtbEyhxnJ1c5Gy4IoNLQCtM664NWvSNtzgJYdT14m2-5OA"}'
    headers:
      User-Agent:
      - Acme::Client v0.3.7 (https://github.com/unixcharles/acme-client)
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - "*/*"
  response:
    status:
      code: 201
      message: Created
    headers:
      Server:
      - nginx
      Content-Type:
      - application/pkix-cert
      Content-Length:
      - '1274'
      Boulder-Request-Id:
      - JT0eyM0CDqE_9xOiZ-fDvZ_v-DnTCtaXv0e6yrpa2_8
      Boulder-Requester:
      - '515213'
      Link:
      - <https://acme-staging.api.letsencrypt.org/acme/issuer-cert>;rel="up"
      Location:
      - https://acme-staging.api.letsencrypt.org/acme/cert/faaf54635f5cf9ec386dcf7530d3ac0cb159
      Replay-Nonce:
      - AzI4YSu3U5pgGfwq-qUuFXxfiDWSihClsI-CuuznQ50
      X-Frame-Options:
      - DENY
      Strict-Transport-Security:
      - max-age=604800
      Expires:
      - Fri, 25 Nov 2016 19:31:43 GMT
      Cache-Control:
      - max-age=0, no-cache, no-store
      Pragma:
      - no-cache
      Date:
      - Fri, 25 Nov 2016 19:31:43 GMT
      Connection:
      - keep-alive
    body:
      encoding: ASCII-8BIT
      string: !binary |-
        MIIE9jCCA96gAwIBAgITAPqvVGNfXPnsOG3PdTDTrAyxWTANBgkqhkiG9w0B
        AQsFADAiMSAwHgYDVQQDDBdGYWtlIExFIEludGVybWVkaWF0ZSBYMTAeFw0x
        NjExMjUxODMyMDBaFw0xNzAyMjMxODMyMDBaMBwxGjAYBgNVBAMTEXd3dy5z
        dWJzdHJha3QuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
        v50+sfgyL4xUXDYC0qpW2fFbE6HsTbvz6XsODgR6z0cCvIPodFP+oDeWm0o+
        gkSLjd4hP/+T4FKSbcEP+CW2g2aimpWB1rBE8a+Jr4QhQ+4txuwbR5wKw4D7
        2CmabhVFluizdkKVB3+exzX69xAxiIZEpXz3uyqpy1XjXTNjXRbyNL1+l/qR
        Ugv8gXFv6wqbZ9hbGthhsMeFc8sA3OwvIp0RCwt3HdDU0ceOho6rPNqRV9P5
        CIIodlVwX5MWIZ1APlMFGsO9y9W46UtJATtyme1XLBpDF4uKCP0WoPlY6koT
        IQCcoGrdWCyyUGtttbir0gKeYMR8jAq6BbtwKRSIdQIDAQABo4ICKTCCAiUw
        DgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD
        AjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQG+gwoYoIjYWSO9Hf//pVDA5Y1
        KDAfBgNVHSMEGDAWgBTAzANGuVggzFxycPPhLssgpvVoOjB4BggrBgEFBQcB
        AQRsMGowMwYIKwYBBQUHMAGGJ2h0dHA6Ly9vY3NwLnN0Zy1pbnQteDEubGV0
        c2VuY3J5cHQub3JnLzAzBggrBgEFBQcwAoYnaHR0cDovL2NlcnQuc3RnLWlu
        dC14MS5sZXRzZW5jcnlwdC5vcmcvMCsGA1UdEQQkMCKCDXN1YnN0cmFrdC5j
        b22CEXd3dy5zdWJzdHJha3QuY29tMIH+BgNVHSAEgfYwgfMwCAYGZ4EMAQIB
        MIHmBgsrBgEEAYLfEwEBATCB1jAmBggrBgEFBQcCARYaaHR0cDovL2Nwcy5s
        ZXRzZW5jcnlwdC5vcmcwgasGCCsGAQUFBwICMIGeDIGbVGhpcyBDZXJ0aWZp
        Y2F0Z
Download .txt
gitextract_u6xi85wh/

├── .dockerignore
├── .gitignore
├── .travis.yml
├── Dockerfile
├── Gemfile
├── LICENCE.md
├── Procfile
├── README.md
├── Rakefile
├── app.json
├── app.rb
├── config/
│   └── puma.rb
├── config.ru
├── docker-compose.yml
├── lib/
│   ├── acme_client_registration.rb
│   ├── certificate_generation.rb
│   ├── certificate_generator.rb
│   ├── challenge.rb
│   ├── cloudflare_challenge.rb
│   ├── logger.rb
│   └── provisioners/
│       └── heroku.rb
├── test/
│   ├── acme_client_registration_test.rb
│   ├── app_test.rb
│   ├── certificate_generator_test.rb
│   ├── cloudflare_challenge_test.rb
│   ├── fixtures/
│   │   └── vcr_cassettes/
│   │       ├── acme-challenge-debug.yml
│   │       ├── acme-new-authz.yml
│   │       ├── acme-new-reg-debug.yml
│   │       ├── acme-new-reg.yml
│   │       ├── check-cloudflare-authentiation-failure.yml
│   │       ├── check-cloudflare-authentiation-success.yml
│   │       ├── check-heroku-authentication-failure.yml
│   │       ├── check-heroku-authentication-succeed.yml
│   │       ├── new-cert-provisioner-heroku-success.yml
│   │       ├── new-cert-provisioner-heroku.yml
│   │       ├── new-certificate-debug.yml
│   │       ├── new-reg-debug-2.yml
│   │       └── new-reg-debug-3.yml
│   ├── logger_test.rb
│   ├── provisioners/
│   │   └── heroku_test.rb
│   └── test_helper.rb
└── workers/
    ├── base.rb
    ├── cloudflare_challenge_worker.rb
    └── worker.rb
Download .txt
SYMBOL INDEX (80 symbols across 16 files)

FILE: app.rb
  function params_valid? (line 44) | def params_valid?
  function authenticate! (line 50) | def authenticate!

FILE: lib/acme_client_registration.rb
  class AcmeClientRegistration (line 3) | class AcmeClientRegistration
    class NoEmailError (line 5) | class NoEmailError < StandardError; end
    method initialize (line 12) | def initialize(options = {})

FILE: lib/certificate_generation.rb
  class CertificateGeneration (line 10) | class CertificateGeneration
    method initialize (line 16) | def initialize(domain, subdomains, debug, app_name, token)
    method provision! (line 26) | def provision!
    method deploy_certificate (line 81) | def deploy_certificate(certificate)
    method redis_key (line 102) | def redis_key
    method set_status (line 106) | def set_status(status)
    method set_error (line 110) | def set_error(error)
    method set_message (line 115) | def set_message(message)
    method acme_client (line 119) | def acme_client
    method endpoint (line 123) | def endpoint

FILE: lib/certificate_generator.rb
  class CertificateGenerator (line 3) | class CertificateGenerator
    method initialize (line 7) | def initialize(options = {})

FILE: lib/challenge.rb
  class Challenge (line 1) | class Challenge
    method initialize (line 5) | def initialize(options = {})
    method status (line 12) | def status

FILE: lib/cloudflare_challenge.rb
  class CloudflareChallenge (line 4) | class CloudflareChallenge
    method initialize (line 8) | def initialize(options = {})
    method create_challenge_records (line 21) | def create_challenge_records
    method verify (line 29) | def verify

FILE: lib/logger.rb
  class Logger (line 1) | class Logger
    method log (line 3) | def self.log(message, options = {})

FILE: lib/provisioners/heroku.rb
  type Provisioner (line 3) | module Provisioner
    class Heroku (line 4) | class Heroku
      method initialize (line 10) | def initialize(options = {})
      method provision! (line 27) | def provision!

FILE: test/acme_client_registration_test.rb
  class AcmeClientRegistrationTest (line 3) | class AcmeClientRegistrationTest < MiniTest::Test
    method setup (line 5) | def setup
    method teardown (line 9) | def teardown
    method test_create_an_instance (line 13) | def test_create_an_instance
    method test_use_the_staging_endpoint (line 20) | def test_use_the_staging_endpoint
    method test_use_the_live_endpoint (line 27) | def test_use_the_live_endpoint
    method test_use_the_live_endpoint_by_default (line 34) | def test_use_the_live_endpoint_by_default
    method test_assign_an_acme_client_with_live_endpoint (line 41) | def test_assign_an_acme_client_with_live_endpoint
    method test_assign_an_acme_client_with_test_endpoint (line 49) | def test_assign_an_acme_client_with_test_endpoint
    method test_creating_without_CONTACT_EMAIL_set_should_raise_an_exception (line 57) | def test_creating_without_CONTACT_EMAIL_set_should_raise_an_exception
    method test_client_should_be_registered_and_agreed_to (line 66) | def test_client_should_be_registered_and_agreed_to

FILE: test/app_test.rb
  class AppTest (line 3) | class AppTest < MiniTest::Test
    method app (line 7) | def app
    method setup (line 11) | def setup
    method teardown (line 15) | def teardown
    method test_certificate_request_post (line 19) | def test_certificate_request_post
    method test_certificate_request_with_correct_params (line 24) | def test_certificate_request_with_correct_params
    method test_certificate_missing_domain_list (line 38) | def test_certificate_missing_domain_list
    method test_certificate_missing_heroku_app_name (line 47) | def test_certificate_missing_heroku_app_name
    method test_get_status_of_certificate_request_that_does_not_exist (line 56) | def test_get_status_of_certificate_request_that_does_not_exist
    method test_get_status_of_certificate_request_that_does_exist (line 66) | def test_get_status_of_certificate_request_that_does_exist

FILE: test/certificate_generator_test.rb
  class CertificateGeneratorTest (line 3) | class CertificateGeneratorTest < MiniTest::Test
    method setup (line 5) | def setup
    method teardown (line 9) | def teardown
    method test_generate_certificate (line 13) | def test_generate_certificate

FILE: test/cloudflare_challenge_test.rb
  class CloudflareChallengeTest (line 3) | class CloudflareChallengeTest < MiniTest::Test
    method setup (line 5) | def setup
    method teardown (line 9) | def teardown
    method test_create_an_instance (line 13) | def test_create_an_instance
    method test_create_an_instance_with_custom_auth (line 24) | def test_create_an_instance_with_custom_auth
    method test_set_zone (line 38) | def test_set_zone
    method test_set_domains (line 49) | def test_set_domains
    method test_add_challenge_records_to_cloudflare (line 60) | def test_add_challenge_records_to_cloudflare
    method test_get_list_of_challenges (line 71) | def test_get_list_of_challenges
    method test_verification (line 82) | def test_verification

FILE: test/logger_test.rb
  class LoggerTest (line 3) | class LoggerTest < MiniTest::Test
    method setup (line 5) | def setup
    method teardown (line 11) | def teardown
    method test_log_a_message_to_console (line 15) | def test_log_a_message_to_console
    method test_log_with_generator (line 19) | def test_log_with_generator
    method test_a_log_with_generator_should_also_write_to_redis (line 30) | def test_a_log_with_generator_should_also_write_to_redis

FILE: test/provisioners/heroku_test.rb
  class Provisioner::HerokuTest (line 3) | class Provisioner::HerokuTest < MiniTest::Test
    method setup (line 5) | def setup
    method teardown (line 10) | def teardown
    method test_creating_a_new_heroku_provisioner_should_return_false_if_using_free_dynos (line 14) | def test_creating_a_new_heroku_provisioner_should_return_false_if_usin...
    method test_creating_a_new_heroku_provisioner_should_return_true_if_successful (line 24) | def test_creating_a_new_heroku_provisioner_should_return_true_if_succe...

FILE: workers/cloudflare_challenge_worker.rb
  class CloudflareChallengeWorker (line 8) | class CloudflareChallengeWorker
    method perform (line 13) | def perform(zone, domains, token, app_name, debug = true, cloudflare =...

FILE: workers/worker.rb
  class Worker (line 4) | class Worker
    method perform (line 9) | def perform(domain, subdomains, debug, app_name, token)
Condensed preview — 44 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (327K chars).
[
  {
    "path": ".dockerignore",
    "chars": 7,
    "preview": ".git/*\n"
  },
  {
    "path": ".gitignore",
    "chars": 5,
    "preview": ".env\n"
  },
  {
    "path": ".travis.yml",
    "chars": 122,
    "preview": "sudo: required\nservices:\n  - docker\n\nrvm:\n  - 2.3.3\n\nscript:\n  - cp .env.sample .env\n  - docker-compose run --rm web rak"
  },
  {
    "path": "Dockerfile",
    "chars": 229,
    "preview": "FROM ruby:2.3\n\nENV APP_HOME /opt/letsencrypt-heroku\nRUN mkdir /opt/letsencrypt-heroku\nWORKDIR $APP_HOME\n\nADD Gemfile* $A"
  },
  {
    "path": "Gemfile",
    "chars": 249,
    "preview": "source 'https://rubygems.org'\n\nruby '2.3.3'\n\ngem 'sinatra'\ngem 'json-jwt', '1.5.2'\ngem 'acme-client'\ngem 'cloudflare'\nge"
  },
  {
    "path": "LICENCE.md",
    "chars": 1076,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2016 Substrakt\n\nPermission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "Procfile",
    "chars": 105,
    "preview": "web: bundle exec puma -C config/puma.rb\nworker: bundle exec sidekiq -q default -r ./workers/base.rb -c 2\n"
  },
  {
    "path": "README.md",
    "chars": 4677,
    "preview": "# letsencrypt-heroku\n\n# Deprecated: This project is no longer maintained. You should use [Automated Certificate Manageme"
  },
  {
    "path": "Rakefile",
    "chars": 100,
    "preview": "task :default => :test\ntask :test do\n  Dir.glob('./test/*_test.rb').each { |file| require file}\nend\n"
  },
  {
    "path": "app.json",
    "chars": 970,
    "preview": "{\n  \"name\": \"letsencrypt-heroku\",\n  \"description\": \"Let's make all of Heroku secure.\",\n  \"keywords\": [\n    \"ssl\",\n    \"s"
  },
  {
    "path": "app.rb",
    "chars": 1651,
    "preview": "require 'sinatra'\nrequire 'dotenv'\nrequire 'sidekiq'\nDotenv.load\n\nrequire_relative 'workers/cloudflare_challenge_worker'"
  },
  {
    "path": "config/puma.rb",
    "chars": 173,
    "preview": "workers 2\nthreads_count = 5\nthreads threads_count, threads_count\n\nrackup      DefaultRackup\nport        ENV['PORT']     "
  },
  {
    "path": "config.ru",
    "chars": 41,
    "preview": "require './app'\nrun Sinatra::Application\n"
  },
  {
    "path": "docker-compose.yml",
    "chars": 622,
    "preview": "version: '2'\nservices:\n  redis:\n    image: redis\n    ports:\n      - \"6379:6379\"\n\n  sidekiq:\n    build: .\n    restart: al"
  },
  {
    "path": "lib/acme_client_registration.rb",
    "chars": 665,
    "preview": "require 'acme-client'\n\nclass AcmeClientRegistration\n\n  class NoEmailError < StandardError; end;\n\n  DEBUG_ENDPOINT = \"htt"
  },
  {
    "path": "lib/certificate_generation.rb",
    "chars": 3916,
    "preview": "require 'openssl'\nrequire 'acme-client'\nrequire 'cloudflare'\nrequire 'resolv'\nrequire 'digest'\nrequire 'httparty'\nrequir"
  },
  {
    "path": "lib/certificate_generator.rb",
    "chars": 549,
    "preview": "require_relative 'logger'\n\nclass CertificateGenerator\n\n  attr_reader :csr, :challenge, :certificate\n\n  def initialize(op"
  },
  {
    "path": "lib/challenge.rb",
    "chars": 297,
    "preview": "class Challenge\n\n  attr_reader :client, :authorization, :domain, :dns01\n\n  def initialize(options = {})\n    @client = op"
  },
  {
    "path": "lib/cloudflare_challenge.rb",
    "chars": 858,
    "preview": "require_relative 'challenge'\nrequire 'cloudflare'\n\nclass CloudflareChallenge\n\n  attr_reader :zone, :domains, :client, :c"
  },
  {
    "path": "lib/logger.rb",
    "chars": 496,
    "preview": "class Logger\n\n  def self.log(message, options = {})\n    $redis = Redis.new(url: ENV['REDIS_URL'])\n    output = ''\n    if"
  },
  {
    "path": "lib/provisioners/heroku.rb",
    "chars": 1777,
    "preview": "require 'httparty'\nrequire_relative '../logger'\nmodule Provisioner\n  class Heroku\n\n    HEROKU_BASE_URL = \"https://api.he"
  },
  {
    "path": "test/acme_client_registration_test.rb",
    "chars": 2060,
    "preview": "require_relative 'test_helper'\n\nclass AcmeClientRegistrationTest < MiniTest::Test\n\n  def setup\n    ENV['CONTACT_EMAIL'] "
  },
  {
    "path": "test/app_test.rb",
    "chars": 2123,
    "preview": "require_relative 'test_helper'\n\nclass AppTest < MiniTest::Test\n\n  include Rack::Test::Methods\n\n  def app\n    Sinatra::Ap"
  },
  {
    "path": "test/certificate_generator_test.rb",
    "chars": 885,
    "preview": "require_relative 'test_helper'\n\nclass CertificateGeneratorTest < MiniTest::Test\n\n  def setup\n    ENV['CONTACT_EMAIL']   "
  },
  {
    "path": "test/cloudflare_challenge_test.rb",
    "chars": 3758,
    "preview": "require_relative 'test_helper'\n\nclass CloudflareChallengeTest < MiniTest::Test\n\n  def setup\n    ENV['CONTACT_EMAIL'] = '"
  },
  {
    "path": "test/fixtures/vcr_cassettes/acme-challenge-debug.yml",
    "chars": 26403,
    "preview": "---\nhttp_interactions:\n- request:\n    method: head\n    uri: https://acme-staging.api.letsencrypt.org/acme/new-reg\n    bo"
  },
  {
    "path": "test/fixtures/vcr_cassettes/acme-new-authz.yml",
    "chars": 24139,
    "preview": "---\nhttp_interactions:\n- request:\n    method: head\n    uri: https://acme-staging.api.letsencrypt.org/acme/new-reg\n    bo"
  },
  {
    "path": "test/fixtures/vcr_cassettes/acme-new-reg-debug.yml",
    "chars": 9659,
    "preview": "---\nhttp_interactions:\n- request:\n    method: head\n    uri: https://acme-staging.api.letsencrypt.org/acme/new-reg\n    bo"
  },
  {
    "path": "test/fixtures/vcr_cassettes/acme-new-reg.yml",
    "chars": 9641,
    "preview": "---\nhttp_interactions:\n- request:\n    method: head\n    uri: https://acme-v01.api.letsencrypt.org/acme/new-reg\n    body:\n"
  },
  {
    "path": "test/fixtures/vcr_cassettes/check-cloudflare-authentiation-failure.yml",
    "chars": 1471,
    "preview": "---\nhttp_interactions:\n- request:\n    method: get\n    uri: https://api.cloudflare.com/client/v4/user\n    body:\n      enc"
  },
  {
    "path": "test/fixtures/vcr_cassettes/check-cloudflare-authentiation-success.yml",
    "chars": 1791,
    "preview": "---\nhttp_interactions:\n- request:\n    method: get\n    uri: https://api.cloudflare.com/client/v4/user\n    body:\n      enc"
  },
  {
    "path": "test/fixtures/vcr_cassettes/check-heroku-authentication-failure.yml",
    "chars": 1084,
    "preview": "---\nhttp_interactions:\n- request:\n    method: get\n    uri: https://api.heroku.com/apps\n    body:\n      encoding: US-ASCI"
  },
  {
    "path": "test/fixtures/vcr_cassettes/check-heroku-authentication-succeed.yml",
    "chars": 1448,
    "preview": "---\nhttp_interactions:\n- request:\n    method: get\n    uri: https://api.heroku.com/apps\n    body:\n      encoding: US-ASCI"
  },
  {
    "path": "test/fixtures/vcr_cassettes/new-cert-provisioner-heroku-success.yml",
    "chars": 54800,
    "preview": "---\nhttp_interactions:\n- request:\n    method: head\n    uri: https://acme-staging.api.letsencrypt.org/acme/new-reg\n    bo"
  },
  {
    "path": "test/fixtures/vcr_cassettes/new-cert-provisioner-heroku.yml",
    "chars": 51954,
    "preview": "---\nhttp_interactions:\n- request:\n    method: head\n    uri: https://acme-staging.api.letsencrypt.org/acme/new-reg\n    bo"
  },
  {
    "path": "test/fixtures/vcr_cassettes/new-certificate-debug.yml",
    "chars": 42892,
    "preview": "---\nhttp_interactions:\n- request:\n    method: head\n    uri: https://acme-staging.api.letsencrypt.org/acme/new-reg\n    bo"
  },
  {
    "path": "test/fixtures/vcr_cassettes/new-reg-debug-2.yml",
    "chars": 18842,
    "preview": "---\nhttp_interactions:\n- request:\n    method: head\n    uri: https://acme-staging.api.letsencrypt.org/acme/new-reg\n    bo"
  },
  {
    "path": "test/fixtures/vcr_cassettes/new-reg-debug-3.yml",
    "chars": 36078,
    "preview": "---\nhttp_interactions:\n- request:\n    method: head\n    uri: https://acme-staging.api.letsencrypt.org/acme/new-reg\n    bo"
  },
  {
    "path": "test/logger_test.rb",
    "chars": 2043,
    "preview": "require_relative 'test_helper'\n\nclass LoggerTest < MiniTest::Test\n\n  def setup\n    ENV['ENVIRONMENT'] = 'test'\n    ENV['"
  },
  {
    "path": "test/provisioners/heroku_test.rb",
    "chars": 1500,
    "preview": "require_relative '../test_helper'\n\nclass Provisioner::HerokuTest < MiniTest::Test\n\n  def setup\n    ENV['HEROKU_OAUTH_KEY"
  },
  {
    "path": "test/test_helper.rb",
    "chars": 524,
    "preview": "ENV['RACK_ENV'] = 'test'\nENV['ENVIRONMENT'] = 'test'\nrequire 'minitest/autorun'\nrequire 'rack/test'\nrequire 'vcr'\n\nrequi"
  },
  {
    "path": "workers/base.rb",
    "chars": 47,
    "preview": "require_relative 'cloudflare_challenge_worker'\n"
  },
  {
    "path": "workers/cloudflare_challenge_worker.rb",
    "chars": 1539,
    "preview": "require 'sidekiq'\nrequire_relative '../lib/logger'\nrequire_relative '../lib/certificate_generator'\nrequire_relative '../"
  },
  {
    "path": "workers/worker.rb",
    "chars": 324,
    "preview": "require 'sidekiq'\nrequire_relative '../lib/certificate_generation'\n\nclass Worker\n  include Sidekiq::Worker\n\n  sidekiq_op"
  }
]

About this extraction

This page contains the full source code of the substrakt/letsencrypt-heroku GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 44 files (306.2 KB), approximately 148.3k tokens, and a symbol index with 80 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!