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.
---
[](https://codeclimate.com/github/substrakt/letsencrypt-heroku)
[](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/)
[](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: [](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
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
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.