manticore 0.4.1-java → 0.4.2-java

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c68549109cd024c3e482eaed8cd316d9c316570d
4
- data.tar.gz: 6844c804051ce09e9f31ccf3ffd4d14d5d294fe9
3
+ metadata.gz: e81862fe8dbfe629fdc9dbe09504e2214b3de702
4
+ data.tar.gz: 5b840aa1a038b4eab593e248b3a679ec6d16fc67
5
5
  SHA512:
6
- metadata.gz: 5f98cbb04885e180f8b692338648460a6b51220168e648629f5dcea0281871e94f16ca8cfd0470bcd33cceb2fed2914fe50b25e00f5226fc59c9e3786005feb9
7
- data.tar.gz: d0a49ec53bb0286a2b6eed9cff0d819f80749317d280150040bf43d54126a9ec6e0a5bf2262c0d13b6c2f297fa8b3b8004e8f02b6e3ae0a2e9c179060a9753b6
6
+ metadata.gz: 9e5e970a68358d71776af2f4fd0b7e13bf3a13dac3d2beb2c860882301a4fe4cfbb1dae42fbff1ca4bc6ff8bff042237370e243fe804c0b1547f6f370c1d3f30
7
+ data.tar.gz: 5f3122739a100067e60c2817476ec75af8af109e1ef4ece4b75fed4e695d51d39c018a1fedc3b71a663bcf21eedc36a1d50c614a4d9dbb749c33fcbbd6c54784
checksums.yaml.gz.sig CHANGED
Binary file
data.tar.gz.sig CHANGED
Binary file
data/.gitignore CHANGED
@@ -15,3 +15,4 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ spec/ssl
data/.travis.yml CHANGED
@@ -4,4 +4,10 @@ rvm:
4
4
  jdk:
5
5
  - oraclejdk8
6
6
  - oraclejdk7
7
- - openjdk7
7
+ - openjdk7
8
+ matrix:
9
+ include:
10
+ - rvm: jruby-head
11
+ jdk: oraclejdk8
12
+ allow_failures:
13
+ - rvm: jruby-head
data/CHANGELOG.md CHANGED
@@ -1,6 +1,14 @@
1
1
  ## v0.4
2
2
 
3
- ### v0.4.1 (pending)
3
+ ### v0.4.3 (pending)
4
+
5
+ ### v0.4.2
6
+
7
+ * Fixed truststore documentation to be more clear (thanks @andrewvc)
8
+ * Always re-raise any errors thrown during request execution, not just a subset of expected exceptions (thanks @andrewvc)
9
+ * Add Connection: Keep-Alive to requests which indicate keepalive to ensure that HTTP/1.0 transactions honor keepalives. HTTP/1.1 requests should be unaffected.
10
+
11
+ ### v0.4.1
4
12
 
5
13
  * Add support for ssl[:ca_file], ssl[:client_cert], and ssl[:client_key], to emulate OpenSSL features in other Ruby HTTP clients
6
14
  * Integrate Faraday adapter for Manticore
data/Gemfile CHANGED
@@ -8,4 +8,5 @@ gem "rspec", "~> 2.0"
8
8
  gem "rspec-its"
9
9
  gem "httpclient", "~> 2.3"
10
10
  gem "rack", "~> 1.5"
11
- gem "rake-compiler"
11
+ gem "rake-compiler"
12
+ gem "gserver"
data/README.md CHANGED
@@ -120,7 +120,10 @@ To set this up, you might create 2 pools, each configured for the task:
120
120
 
121
121
  ```ruby
122
122
  general_http_client = Manticore::Client.new connect_timeout: 10, socket_timeout: 10, request_timeout: 10, follow_redirects: true, max_per_route: 2
123
- proxied_backend_client = Manticore::Client.new proxy: "https://backend.internal:4242", truststore: "./truststore.jks", truststore_password: "s3cr3t"
123
+ # With an OpenSSL CA store
124
+ proxied_backend_client = Manticore::Client.new proxy: "https://backend.internal:4242", ssl: {ca_file: "my_certs.pem"}
125
+ # Or with a .jks truststore
126
+ # proxied_backend_client = Manticore::Client.new proxy: "https://backend.internal:4242", ssl: {truststore: "./truststore.jks", truststore_password: "s3cr3t"}
124
127
  ```
125
128
 
126
129
  This would create 2 separate request pools; the first would be configured with generous timeouts and redirect following, and would use the system
@@ -273,6 +276,15 @@ future = client.background.get("http://google.com")
273
276
  response = future.get
274
277
  ```
275
278
 
279
+ ### Faraday Adapter
280
+
281
+ Manticore includes a Faraday adapter. To use it:
282
+
283
+ require 'faraday/adapter/manticore'
284
+ Faraday.new(...) do |faraday|
285
+ faraday.adapter :manticore
286
+ end
287
+
276
288
  ## Contributing
277
289
 
278
290
  1. Fork it
data/Rakefile CHANGED
@@ -5,7 +5,7 @@ RSpec::Core::RakeTask.new(:spec) do |spec|
5
5
  spec.pattern = 'spec/**/*_spec.rb'
6
6
  spec.rspec_opts = ['--tty --color --format documentation']
7
7
  end
8
- task :default => :spec
8
+ task :default => [:generate_certs, :spec]
9
9
 
10
10
  require 'rake/javaextensiontask'
11
11
 
@@ -19,4 +19,33 @@ Rake::JavaExtensionTask.new do |ext|
19
19
  ext.name = "manticore-ext"
20
20
  ext.lib_dir = "lib/jar"
21
21
  ext.classpath = jars.map {|x| File.expand_path x}.join ':'
22
+ end
23
+
24
+ task :generate_certs do
25
+ root = File.expand_path("../spec/ssl", __FILE__)
26
+ openssl = `which openssl`.strip
27
+ keytool = `which keytool`.strip
28
+
29
+ Dir.glob("#{root}/*").each {|f| File.unlink f }
30
+
31
+ # Create the CA
32
+ cmds = [
33
+ "#{openssl} genrsa 4096 | #{openssl} pkcs8 -topk8 -nocrypt -out #{root}/root-ca.key",
34
+ "#{openssl} req -sha256 -x509 -newkey rsa:4096 -nodes -key #{root}/root-ca.key -sha256 -days 365 -out #{root}/root-ca.crt -subj \"/C=US/ST=The Internet/L=The Internet/O=Manticore CA/OU=Manticore/CN=localhost\"",
35
+
36
+ # Create the client CSR, key, and signed cert
37
+ "#{openssl} genrsa 4096 | #{openssl} pkcs8 -topk8 -nocrypt -out #{root}/client.key",
38
+ "#{openssl} req -sha256 -key #{root}/client.key -newkey rsa:4096 -out #{root}/client.csr -subj \"/C=US/ST=The Internet/L=The Internet/O=Manticore Client/OU=Manticore/CN=localhost\"",
39
+ "#{openssl} x509 -req -in #{root}/client.csr -CA #{root}/root-ca.crt -CAkey #{root}/root-ca.key -CAcreateserial -out #{root}/client.crt -sha256 -days 1",
40
+
41
+ # Create the server cert
42
+ "#{openssl} genrsa 4096 | #{openssl} pkcs8 -topk8 -nocrypt -out #{root}/host.key",
43
+ "#{openssl} req -sha256 -key #{root}/host.key -newkey rsa:4096 -out #{root}/host.csr -subj \"/C=US/ST=The Internet/L=The Internet/O=Manticore Host/OU=Manticore/CN=localhost\"",
44
+ "#{openssl} x509 -req -in #{root}/host.csr -CA #{root}/root-ca.crt -CAkey #{root}/root-ca.key -CAcreateserial -out #{root}/host.crt -sha256 -days 1",
45
+
46
+ "#{keytool} -import -file #{root}/root-ca.crt -alias rootCA -keystore #{root}/truststore.jks -noprompt -storepass test123",
47
+ "#{openssl} pkcs12 -export -clcerts -out #{root}/client.p12 -inkey #{root}/client.key -in #{root}/client.crt -certfile #{root}/root-ca.crt -password pass:test123",
48
+ ]
49
+
50
+ cmds.each.with_index {|cmd, index| puts "#{index}. #{cmd}"; system cmd }
22
51
  end
data/lib/manticore.rb CHANGED
@@ -34,9 +34,21 @@ module Manticore
34
34
  # DNS resolution failure
35
35
  class ResolutionFailure < ManticoreException; end
36
36
 
37
+ # Is something flat out malformed (bad port number?)
38
+ class InvalidArgumentException < ManticoreException; end
39
+
37
40
  # Socket breaks, etc
38
41
  class SocketException < ManticoreException; end
39
42
 
43
+ # General Timeout exception thrown for various Manticore timeouts
44
+ class Timeout < ManticoreException; end
45
+ class SocketTimeout < Timeout; end
46
+ class ConnectTimeout < Timeout; end
47
+
48
+ # Did we miss an exception? We may still want to catch it
49
+ class UnknownException < ManticoreException; end
50
+
51
+ require_relative "./manticore/java_extensions"
40
52
  require_relative './manticore/client/proxies'
41
53
  require_relative './manticore/client'
42
54
  require_relative './manticore/response'
@@ -2,9 +2,6 @@ require 'thread'
2
2
  require 'base64'
3
3
 
4
4
  module Manticore
5
- # General Timeout exception thrown for various Manticore timeouts
6
- class Timeout < ManticoreException; end
7
-
8
5
  # @!macro [new] http_method_shared
9
6
  # @param url [String] URL to request
10
7
  # @param options [Hash]
@@ -178,8 +175,8 @@ module Manticore
178
175
  # We can disable this for connection reuse.
179
176
  builder.disable_connection_state unless options.fetch(:ssl, {}).fetch(:track_state, false)
180
177
 
181
- keepalive = options.fetch(:keepalive, true)
182
- if keepalive == false
178
+ @keepalive = options.fetch(:keepalive, true)
179
+ if @keepalive == false
183
180
  builder.set_connection_reuse_strategy {|response, context| false }
184
181
  else
185
182
  builder.set_connection_reuse_strategy DefaultConnectionReuseStrategy.new
@@ -463,9 +460,11 @@ module Manticore
463
460
  req.set_config config.build
464
461
  end
465
462
 
466
- if options[:headers]
467
- options[:headers].each {|k, v| req.set_header k, v }
468
- end
463
+
464
+ options[:headers].each {|k, v| req[k] = v } if options.key?(:headers)
465
+
466
+ # Support keepalive on HTTP/1.0 connections
467
+ req["Connection"] = "Keep-Alive" if @keepalive
469
468
 
470
469
  context = HttpClientContext.new
471
470
  proxy_user = req_options[:proxy].is_a?(Hash) && (req_options[:proxy][:user] || req_options[:proxy][:username])
@@ -587,9 +586,10 @@ module Manticore
587
586
  KEY_EXTRACTION_REGEXP = /(?:^-----BEGIN(.* )PRIVATE KEY-----\n)(.*?)(?:-----END\1PRIVATE KEY.*$)/m
588
587
  def setup_key_store(ssl_options, context)
589
588
  key_store = get_store(:keystore, ssl_options) if ssl_options.key?(:keystore)
589
+ keystore_password = ssl_options.fetch(:keystore_password, "").to_java.toCharArray
590
590
 
591
591
  # Support OpenSSL-style bare X.509 certs with an RSA key
592
- # This is really dumb - we have to b64-decode the key ourselves.
592
+ # This is really dumb - we have to b64-decode the key ourselves, and we can only support PKCS8
593
593
  if ssl_options[:client_cert] && ssl_options[:client_key]
594
594
  key_store ||= blank_keystore
595
595
  certs, key = nil, nil
@@ -597,7 +597,6 @@ module Manticore
597
597
  certs = CertificateFactory.get_instance("X509").generate_certificates(fp.to_inputstream).to_array([].to_java(Certificate))
598
598
  end
599
599
 
600
- keystore_password = ssl_options.fetch(:keystore_password, "").to_java.toCharArray
601
600
  # Add each of the keys in the given keyfile into the keystore.
602
601
  open(ssl_options[:client_key]) do |fp|
603
602
  key_parts = fp.read.scan(KEY_EXTRACTION_REGEXP)
@@ -0,0 +1,20 @@
1
+ java_import "org.apache.http.client.methods.HttpRequestBase"
2
+
3
+ class Java::OrgApacheHttpClientMethods::HttpRequestBase
4
+
5
+ # Provides an easy way to get the request headers from any request
6
+ def headers
7
+ Hash[*get_all_headers.flat_map {|h| [h.name, h.value] }]
8
+ end
9
+
10
+ # Get a single request header
11
+ def [](key)
12
+ h = get_last_header(key)
13
+ h && h.value || nil
14
+ end
15
+
16
+ # Set a single request header
17
+ def []=(key, val)
18
+ set_header key, val
19
+ end
20
+ end
@@ -45,22 +45,35 @@ module Manticore
45
45
  @called = true
46
46
  begin
47
47
  @client.execute @request, self, @context
48
- execute_complete
49
- return self
50
- rescue Java::JavaNet::SocketTimeoutException, Java::OrgApacheHttpConn::ConnectTimeoutException => e
51
- ex = Manticore::Timeout.new(e.cause || e.message)
48
+ rescue Java::JavaNet::SocketTimeoutException => e
49
+ ex = Manticore::SocketTimeout
50
+ rescue Java::OrgApacheHttpConn::ConnectTimeoutException => e
51
+ ex = Manticore::ConnectTimeout
52
52
  rescue Java::JavaNet::SocketException => e
53
- ex = Manticore::SocketException.new(e.cause || e.message)
53
+ ex = Manticore::SocketException
54
54
  rescue Java::OrgApacheHttpClient::ClientProtocolException, Java::JavaxNetSsl::SSLHandshakeException, Java::OrgApacheHttpConn::HttpHostConnectException,
55
55
  Java::OrgApacheHttp::NoHttpResponseException, Java::OrgApacheHttp::ConnectionClosedException => e
56
- ex = Manticore::ClientProtocolException.new(e.cause || e.message)
56
+ ex = Manticore::ClientProtocolException
57
57
  rescue Java::JavaNet::UnknownHostException => e
58
- ex = Manticore::ResolutionFailure.new(e.cause || e.message)
58
+ ex = Manticore::ResolutionFailure
59
+ rescue Java::JavaLang::IllegalArgumentException => e
60
+ ex = Manticore::InvalidArgumentException
61
+ rescue Java::JavaLang::Exception => e # Handle anything we may have missed from java
62
+ ex = Manticore::UnknownException
63
+ rescue StandardError => e
64
+ @exception = e
65
+ end
66
+
67
+ # TODO: If calling async, execute_complete may fail and then silently swallow exceptions. How do we fix that?
68
+ if ex || @exception
69
+ @exception ||= ex.new(e.cause || e.message)
70
+ @handlers[:failure].call @exception
71
+ execute_complete
72
+ nil
73
+ else
74
+ execute_complete
75
+ self
59
76
  end
60
- @exception = ex
61
- @handlers[:failure].call ex
62
- execute_complete
63
- nil
64
77
  end
65
78
 
66
79
  def fire_and_forget
@@ -121,6 +134,13 @@ module Manticore
121
134
  @headers
122
135
  end
123
136
 
137
+ # Return the value of a single response header. Will call the request if it has not been called yet.
138
+ #
139
+ # @return [String] Value of the header, or nil if not present
140
+ def [](key)
141
+ headers[key.downcase]
142
+ end
143
+
124
144
  # Return the response code from this request as an integer. Will call the request if it has not been called yet.
125
145
  #
126
146
  # @return [Integer] The response code
@@ -1,3 +1,3 @@
1
1
  module Manticore
2
- VERSION = "0.4.1"
2
+ VERSION = "0.4.2"
3
3
  end
@@ -89,7 +89,7 @@ describe Manticore::Client do
89
89
  end
90
90
 
91
91
  context 'when on and custom trust store is given' do
92
- let(:client) { Manticore::Client.new :ssl => {verify: :strict, truststore: File.expand_path("../../ssl/test_truststore", __FILE__), truststore_password: "test123"} }
92
+ let(:client) { Manticore::Client.new :ssl => {verify: :strict, truststore: File.expand_path("../../ssl/truststore.jks", __FILE__), truststore_password: "test123"} }
93
93
 
94
94
  it "should verify the request and succeed" do
95
95
  expect { client.get("https://localhost:55444/").body }.to_not raise_exception
@@ -97,7 +97,7 @@ describe Manticore::Client do
97
97
  end
98
98
 
99
99
  context "when the client specifies a protocol list" do
100
- let(:client) { Manticore::Client.new :ssl => {verify: :strict, truststore: File.expand_path("../../ssl/test_truststore", __FILE__), truststore_password: "test123", protocols: ["TLSv1", "TLSv1.1", "TLSv1.2"]} }
100
+ let(:client) { Manticore::Client.new :ssl => {verify: :strict, truststore: File.expand_path("../../ssl/truststore.jks", __FILE__), truststore_password: "test123", protocols: ["TLSv1", "TLSv1.1", "TLSv1.2"]} }
101
101
 
102
102
  it "should verify the request and succeed" do
103
103
  expect { client.get("https://localhost:55444/").body }.to_not raise_exception
@@ -105,7 +105,7 @@ describe Manticore::Client do
105
105
  end
106
106
 
107
107
  context 'when on and custom trust store is given with the wrong password' do
108
- let(:client) { Manticore::Client.new :ssl => {verify: :strict, truststore: File.expand_path("../../ssl/test_truststore", __FILE__), truststore_password: "wrongpass"} }
108
+ let(:client) { Manticore::Client.new :ssl => {verify: :strict, truststore: File.expand_path("../../ssl/truststore.jks", __FILE__), truststore_password: "wrongpass"} }
109
109
 
110
110
  it "should fail to load the keystore" do
111
111
  expect { client.get("https://localhost:55444/").body }.to raise_exception(Java::JavaIo::IOException)
@@ -113,7 +113,7 @@ describe Manticore::Client do
113
113
  end
114
114
 
115
115
  context 'when ca_file is given' do
116
- let(:client) { Manticore::Client.new :ssl => {verify: :strict, ca_file: File.expand_path("../../ssl/ca_cert.crt", __FILE__) } }
116
+ let(:client) { Manticore::Client.new :ssl => {verify: :strict, ca_file: File.expand_path("../../ssl/root-ca.crt", __FILE__) } }
117
117
 
118
118
  it "should verify the request and succeed" do
119
119
  expect { client.get("https://localhost:55444/").body }.to_not raise_exception
@@ -124,7 +124,7 @@ describe Manticore::Client do
124
124
  let(:client) { Manticore::Client.new(
125
125
  :ssl => {
126
126
  verify: :strict,
127
- ca_file: File.expand_path("../../ssl/ca_cert.crt", __FILE__),
127
+ ca_file: File.expand_path("../../ssl/root-ca.crt", __FILE__),
128
128
  client_cert: File.expand_path("../../ssl/client.crt", __FILE__),
129
129
  client_key: File.expand_path("../../ssl/client.key", __FILE__)
130
130
  })
@@ -147,12 +147,13 @@ describe Manticore::Client do
147
147
  context "when client cert auth is provided" do
148
148
  let(:client) {
149
149
  options = {
150
- truststore: File.expand_path("../../ssl/test_truststore", __FILE__),
150
+ truststore: File.expand_path("../../ssl/truststore.jks", __FILE__),
151
151
  truststore_password: "test123",
152
152
  keystore: File.expand_path("../../ssl/client.p12", __FILE__),
153
- keystore_password: ""
153
+ keystore_password: "test123",
154
+ verify: :strict
154
155
  }
155
- Manticore::Client.new :ssl => options.merge(verify: :strict)
156
+ Manticore::Client.new :ssl => options
156
157
  }
157
158
 
158
159
  it "should successfully auth requests" do
@@ -163,10 +164,11 @@ describe Manticore::Client do
163
164
  context "when client cert auth is not provided" do
164
165
  let(:client) {
165
166
  options = {
166
- truststore: File.expand_path("../../ssl/test_truststore", __FILE__),
167
- truststore_password: "test123"
167
+ truststore: File.expand_path("../../ssl/truststore.jks", __FILE__),
168
+ truststore_password: "test123",
169
+ verify: :strict
168
170
  }
169
- Manticore::Client.new :ssl => options.merge(verify: :strict)
171
+ Manticore::Client.new :ssl => options
170
172
  }
171
173
 
172
174
  it "should fail the request" do
@@ -227,6 +229,29 @@ describe Manticore::Client do
227
229
  req = client.async.get(local_server).on_success {|r| }
228
230
  expect { client.execute! }.to change { req.called? }.from(false).to(true)
229
231
  end
232
+
233
+
234
+ describe "with a bad port number" do
235
+ it "should return a Manticore::InvalidArgumentException" do
236
+ failure = nil
237
+ client.async.get(local_server("/", 65536)).
238
+ on_failure {|f| failure = f }
239
+ client.execute!
240
+ expect(failure).to be_a(Manticore::InvalidArgumentException)
241
+ end
242
+ end
243
+
244
+ describe "mysterious failures" do
245
+ it "should still return an error to on failure" do
246
+ failure = nil
247
+ # I'm not crazy about reaching into the client via instance_variable_get here, but it works.
248
+ expect(client.instance_variable_get("@client")).to receive(:execute).and_raise(StandardError.new("Uh oh"))
249
+ client.async.get(local_server).
250
+ on_failure {|f| failure = f }
251
+ client.execute!
252
+ expect(failure).to be_a(StandardError)
253
+ end
254
+ end
230
255
  end
231
256
 
232
257
  context "when client-wide cookie management is disabled" do
@@ -532,7 +557,12 @@ describe Manticore::Client do
532
557
  describe "keepalive" do
533
558
  let(:url) { "http://www.facebook.com/" }
534
559
 
560
+
535
561
  context "with keepalive" do
562
+ it "should add the Connection: Keep-Alive header for http/1.0" do
563
+ expect( client.get(url).request["Connection"] ).to eq "Keep-Alive"
564
+ end
565
+
536
566
  let(:client) { Manticore::Client.new keepalive: true, pool_max: 1 }
537
567
 
538
568
  it "should keep the connection open after a request" do
@@ -547,6 +577,10 @@ describe Manticore::Client do
547
577
  context "without keepalive" do
548
578
  let(:client) { Manticore::Client.new keepalive: false, pool_max: 1 }
549
579
 
580
+ it "should not add the Connection: Keep-Alive header for http/1.0" do
581
+ expect( client.get(url).request["Connection"] ).to be_nil
582
+ end
583
+
550
584
  it "should close the connection after a request" do
551
585
  skip
552
586
  response = client.get(url).call
@@ -562,7 +596,6 @@ describe Manticore::Client do
562
596
  before do
563
597
  @socket = TCPServer.new 4567
564
598
  @server = Thread.new do
565
- puts "Accepting"
566
599
  loop do
567
600
  client = @socket.accept
568
601
  client.puts([
@@ -630,11 +663,11 @@ describe Manticore::Client do
630
663
  let(:client) { Manticore::Client.new request_timeout: 1, connect_timeout: 1, socket_timeout: 1 }
631
664
 
632
665
  it "should time out" do
633
- expect { client.get(local_server "/?sleep=2").body }.to raise_exception(Manticore::Timeout)
666
+ expect { client.get(local_server "/?sleep=2").body }.to raise_exception(Manticore::SocketTimeout)
634
667
  end
635
668
 
636
669
  it "should time out when custom request options are passed" do
637
- expect { client.get(local_server("/?sleep=2"), max_redirects: 5).body }.to raise_exception(Manticore::Timeout)
670
+ expect { client.get(local_server("/?sleep=2"), max_redirects: 5).body }.to raise_exception(Manticore::SocketTimeout)
638
671
  end
639
672
  end
640
673
 
@@ -8,6 +8,10 @@ describe Manticore::Response do
8
8
  its(:body) { should be_a String }
9
9
  its(:length) { should be_a Fixnum }
10
10
 
11
+ it "should provide response header lookup via #[]" do
12
+ subject["Content-Type"].should eq "text/plain"
13
+ end
14
+
11
15
  it "should read the body" do
12
16
  subject.body.should match "Manticore"
13
17
  end
data/spec/spec_helper.rb CHANGED
@@ -93,8 +93,9 @@ def start_ssl_server(port, options = {})
93
93
  cert_name = [
94
94
  %w[CN localhost],
95
95
  ]
96
- cert = OpenSSL::X509::Certificate.new File.read(File.expand_path('../ssl/localhost.pem', __FILE__))
97
- pkey = OpenSSL::PKey::RSA.new File.read(File.expand_path('../ssl/localhost.key', __FILE__))
96
+ cert = OpenSSL::X509::Certificate.new File.read(File.expand_path('../ssl/host.crt', __FILE__))
97
+ cert.version = 0 # HACK: Work around jruby-openssl in jruby-head not setting cert.version
98
+ pkey = OpenSSL::PKey::RSA.new File.read(File.expand_path('../ssl/host.key', __FILE__))
98
99
  @servers[port] = Thread.new {
99
100
  server = WEBrick::HTTPServer.new(
100
101
  {
@@ -122,8 +123,8 @@ RSpec.configure do |c|
122
123
  start_server 55441
123
124
  start_server 55442
124
125
  start_ssl_server 55444
125
- start_ssl_server 55445, :SSLVerifyClient => OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT, :SSLCACertificateFile => File.expand_path("../ssl/ca_cert.pem", __FILE__)
126
+ start_ssl_server 55445, :SSLVerifyClient => OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT, :SSLCACertificateFile => File.expand_path("../ssl/root-ca.crt", __FILE__)
126
127
  }
127
128
 
128
129
  c.after(:suite) { stop_servers }
129
- end
130
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: manticore
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: java
6
6
  authors:
7
7
  - Chris Heald
@@ -30,7 +30,7 @@ cert_chain:
30
30
  cnyabLOcGIKZNxvnSfwOuCBnjgoSOyJi/n48n1s+OPB/OmPJoWmhKu2DO4sUb4+K
31
31
  /3Mhp5UWSl9SmDR1
32
32
  -----END CERTIFICATE-----
33
- date: 2015-04-04 00:00:00.000000000 Z
33
+ date: 2015-07-02 00:00:00.000000000 Z
34
34
  dependencies:
35
35
  - !ruby/object:Gem::Dependency
36
36
  requirement: !ruby/object:Gem::Requirement
@@ -104,6 +104,7 @@ files:
104
104
  - lib/manticore/client/proxies.rb
105
105
  - lib/manticore/cookie.rb
106
106
  - lib/manticore/facade.rb
107
+ - lib/manticore/java_extensions.rb
107
108
  - lib/manticore/response.rb
108
109
  - lib/manticore/stubbed_response.rb
109
110
  - lib/manticore/version.rb
@@ -115,16 +116,7 @@ files:
115
116
  - spec/manticore/response_spec.rb
116
117
  - spec/manticore/stubbed_response_spec.rb
117
118
  - spec/spec_helper.rb
118
- - spec/ssl/ca_cert.crt
119
- - spec/ssl/ca_cert.pem
120
- - spec/ssl/ca_key.pem
121
- - spec/ssl/client.crt
122
- - spec/ssl/client.key
123
- - spec/ssl/client.p12
124
- - spec/ssl/localhost.key
125
- - spec/ssl/localhost.pem
126
- - spec/ssl/readme.md
127
- - spec/ssl/test_truststore
119
+ - spec/ssl/.keepme
128
120
  homepage: https://github.com/cheald/manticore
129
121
  licenses:
130
122
  - MIT
@@ -145,7 +137,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
145
137
  version: '0'
146
138
  requirements: []
147
139
  rubyforge_project:
148
- rubygems_version: 2.4.5
140
+ rubygems_version: 2.4.8
149
141
  signing_key:
150
142
  specification_version: 4
151
143
  summary: Manticore is an HTTP client built on the Apache HttpCore components
@@ -157,13 +149,4 @@ test_files:
157
149
  - spec/manticore/response_spec.rb
158
150
  - spec/manticore/stubbed_response_spec.rb
159
151
  - spec/spec_helper.rb
160
- - spec/ssl/ca_cert.crt
161
- - spec/ssl/ca_cert.pem
162
- - spec/ssl/ca_key.pem
163
- - spec/ssl/client.crt
164
- - spec/ssl/client.key
165
- - spec/ssl/client.p12
166
- - spec/ssl/localhost.key
167
- - spec/ssl/localhost.pem
168
- - spec/ssl/readme.md
169
- - spec/ssl/test_truststore
152
+ - spec/ssl/.keepme
metadata.gz.sig CHANGED
@@ -1,2 +1,3 @@
1
- :ot�� b��.�Վ_��!��>�d����)}K%ޕ���Ӏ@��7 W$Z}h��9���:Uw���aLd`��|;�O,:�ɔ�: +*g7)^sߒ�)mX�2����iU��, �߱����e^z��3`;�S%������?�u��+<�s���=�' ��k�M�d�?~��*�Ã�1r�) ܠ��`t�����&�}:”J���-�VLYF�sO��q�dbc���{`?�1�n
2
- �����
1
+ B1PbЇX"�bu�9� ds��76�\����L�Wk(x?�>ok B�.����)�E�8a������3[z��y��3]9��Op46�*$���z����k��Q��P`ƚq|iV��y�+,~�SJ��RiF
2
+ \μ��CF=�Yj��\Q��9)�����r/�_��CC�`�j}u[t_L���Md3���t�&��D �|�Q��㮸j�5
3
+ �Y-�m�o/�5<�*��aL� "��5
data/spec/ssl/ca_cert.crt DELETED
Binary file
data/spec/ssl/ca_cert.pem DELETED
@@ -1,31 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIFPjCCAyYCCQCQsu6LeOWnuzANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQGEwJV
3
- UzELMAkGA1UECAwCTUQxEjAQBgNVBAcMCUJhbHRpbW9yZTEQMA4GA1UEAwwHVGVz
4
- dCBDQTEfMB0GCSqGSIb3DQEJARYQdGVzdEBleGFtcGxlLmNvbTAeFw0xNTAxMDcx
5
- NzM3MDdaFw0yODA5MTUxNzM3MDdaMGExCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJN
6
- RDESMBAGA1UEBwwJQmFsdGltb3JlMRAwDgYDVQQDDAdUZXN0IENBMR8wHQYJKoZI
7
- hvcNAQkBFhB0ZXN0QGV4YW1wbGUuY29tMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
8
- MIICCgKCAgEAuTlMyzLeLF6ts6lqVsSFbNC2R0KXvRzXEztbzsV/yVYTkaX2Pnul
9
- EevfU/qEhza94032tCVqvVXu1X11PJEQRWmZ7s5ovEW119h5N9cMlHBaAOJbls3S
10
- igDC2SsJGCnfrYZpuBdbMsTtqE50OEXHCK1jHkmM8821XvEwhsPSRgSplcsgVS2Q
11
- rxzIePznpdJnSFI6T7S/Woekt0Mn1udwOOhKo6Y3NaxX7zM3LYF3RBFwvY2wpzV/
12
- Mu8/Be19a8QLN3ZStyAwAyS1nbH1/a70Ie8yFiEZs76QVJYqkfedQkt24wz5fGBo
13
- VCY/wlkGy36U0Bijuatoh4dr3ivxNERz6yq7O97vlrsq4zFBG8VRQbATh/APTFBQ
14
- 7tWJDlQImqEfVnWCv8bEy4kkTBz260iT0/WmEC5zYT7NW3nKfGGdo8pERqWn1x9g
15
- TLpsPuIo8b3vUUJjlqpSfSoiiabC6WP0bQ8h8swvAWEK2Q2e5KqbmSmlfVrCQUyn
16
- CxsS9WwX9Zm/AUS/hxbs6gCnmKcIVVcesWrnpXzkC2tevAYrIIm94Enwy/YyKBId
17
- N/pK3DcWIb3NG/6AfBywSnW9mpbyXvnScDMS5FXZhb6eVp/3zTKYox4OQenb6qX0
18
- JFRHuX2cVK84WJtJEKAFvO2nsY2kg2C3h3I3LCZTthdnZ06Nq1AV9wsCAwEAATAN
19
- BgkqhkiG9w0BAQUFAAOCAgEAVQw+V+dP73ZMUeSd2WqL7flPfUM7T0T52Amtw2zD
20
- 2nynQ3xwHwyHrKNm2S0CIdu3Eq4R0EFznk6DhjeLM0kAJX4RuWraT16TCcLq/YxC
21
- K4qXAX6eyq3oauv47PTUMbSeIwyqspY/LY/cGxzgeFMNWHc2llUPTyN3qszubMUn
22
- T/3Mbec1WCIgGh4TqFloCPqLy/EqkANXXW4V10olhjzGkwjZ5KoJVmXTQlTzz2PJ
23
- mVeIQXlceawj25inhjdvjFWMaO1csm5ZNqIBvLgN45gKxcnDjUbUyglRRa0Dxvut
24
- T94HbFONYHWMTDWO5ElGgjjjdwCAiyKuAk/Lv5ZJ8dw8ByPLzsjM76lbzlXGDGsx
25
- /ay4PuBCOMKOul4yyb8WMFcsIzk/f/mUhU68gTesMYX0mNYqjDvifA8Ws7So+yD+
26
- oMAwMabkn11p5UwPLpszr7cqfmYTsxcHQUKFYPM3jySxaqOU1mwL4d/FshrcR1s2
27
- doen2Dq2VzJFxJqsQVK7uvEz847Av3JRUDCbjx7rYc9DfuY6anZ1/tv7YqPGxiXd
28
- LznEPNy9/9p5gGtlj6bqo8l4Kf+puvpkX3qICelO3P9Unzky+tNrkY7i2rgK9Vyh
29
- X6EOcJ8K53Y9AHOvKElq/UszMOjkZbpGo/qhZkYPGqaD8yM35MNrQXBonk/zH6cA
30
- xA4=
31
- -----END CERTIFICATE-----
data/spec/ssl/ca_key.pem DELETED
@@ -1,52 +0,0 @@
1
- -----BEGIN PRIVATE KEY-----
2
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- pE5te4qf/jnUpzMxooyO5sAdFzOp9K0Y2+fqxQ0LFu103xHJZdEvksNw5+G44Jkl
29
- ysVwHVkI4XmQuM2Bi89w+eVTbV3vynpA4kLjmFinDsXiRefZAoIBAQDKYBrhzNzN
30
- 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
- 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
- 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
- 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
- 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
- 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
- kN22O0iKdIwJePMm/Fq/a+9GSmV0U4IW54B9A38Y1MqVrWBkPfVB9ZZZ8Gp6eCRI
37
- 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
- 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
- YWBKCx0AwjQ4Sf6DQc8Rald79myBfHlPqjkGpYIWvJpga9gajGf/CrHHB4guBDlY
40
- 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
- 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
- j+X8lPCHXliCuuMFGOJB6d3iBi7fo8XS/xr/mWR5fJO5+H/garxCIW90eZR3GExX
43
- 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
- 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
- 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
- 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
- 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
- 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
- HqkLCzZIn2K4VSDwd9J2szyWsHbJ+O5A/pdpz4ZNkF8boXfhM3z8Xv1JLkG/dq70
50
- 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
51
- umjprdvaT6QOMOjb1GZqJhdCLskcB/w=
52
- -----END PRIVATE KEY-----
data/spec/ssl/client.crt DELETED
@@ -1,22 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIDlTCCAX0CAQEwDQYJKoZIhvcNAQEFBQAwYTELMAkGA1UEBhMCVVMxCzAJBgNV
3
- BAgMAk1EMRIwEAYDVQQHDAlCYWx0aW1vcmUxEDAOBgNVBAMMB1Rlc3QgQ0ExHzAd
4
- BgkqhkiG9w0BCQEWEHRlc3RAZXhhbXBsZS5jb20wIBcNMTQxMjEwMjIwMzMxWhgP
5
- MjExNDExMTYyMjAzMzFaMEIxCzAJBgNVBAYTAlhYMRUwEwYDVQQHDAxEZWZhdWx0
6
- IENpdHkxHDAaBgNVBAoME0RlZmF1bHQgQ29tcGFueSBMdGQwgZ8wDQYJKoZIhvcN
7
- AQEBBQADgY0AMIGJAoGBANf8i2rFB1llfRuNuERJyvXCR9cHEvW7jAXXUbrWRAFJ
8
- yAE466ZYPWBZZ241iQOFsEAtjldly80USyD0Nfx18M6FR6dppH/cqEsLKT6Esa5X
9
- ASOMJhgftiU2CvjIkVSVlIdTACetnoLLGF926F7lyNgAS4b9PZdg4QFr2Ih04NSx
10
- AgMBAAEwDQYJKoZIhvcNAQEFBQADggIBAKWAYd1Cgzu9lvhjweeO2HI9eLk7pr/c
11
- 1f6yOLxwfZyxCVYkQ906/YVcO+vvb+R1gbHEw3cHED9SgIZARvNNM9I2YFk/KFEg
12
- 3N8mo37KOHu4HGyhRcJqB90P7umwVyWJn2iXe8Wus/eWsszBgXyPM3Xa7Wwy7aBw
13
- AXAnrRhESethWI3vH3yAJeT1RG1rGjEqEuojfDxgzKvt08PgMwkN8VY0b7XdAdXj
14
- ycXCmhaTLveM9BQVYY/LrrMR4ynVM6Fv3GXR3Sz/Eup4sJTXo3DhZ4rSBAPkyHCD
15
- wxcmrjEL9eMG8kqXT4y/UQyXYhWKbFB3InnfZCh/QJ1+JqpIhi+tEMrVRvMrYp7l
16
- /6ZGml4wHlCL+ky/wG30sgTHpj+S8PG96LnJ+kXnkxycq6vCRJEfRmXhh70swIiv
17
- Pgh6RAZu6AdVX+gztnD0oSbez39hb4qcolLjlSO2msBTbQ2lp9zNrB4MqzuAgC1K
18
- CWs2oBm6NrrR4+Sx/JjLmQcoSeuFooUmloL1c5XRv1B7vpx9P2Do0aF6Xksvli0w
19
- 62n72nI7nF8VfyKjjEABk6dNBK0dYFrO+5pWJ4KEdOt2fVw5pduB4K2TN12z0LlY
20
- ItFnYxmFPzUGleMHZsHASsMPlNtroE4p6O+ofNfrwwBzSQ+G+KDoC94TzOF2pf69
21
- A3NjNKNgxgG5
22
- -----END CERTIFICATE-----
data/spec/ssl/client.key DELETED
@@ -1,16 +0,0 @@
1
- -----BEGIN PRIVATE KEY-----
2
- MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBANf8i2rFB1llfRuN
3
- uERJyvXCR9cHEvW7jAXXUbrWRAFJyAE466ZYPWBZZ241iQOFsEAtjldly80USyD0
4
- Nfx18M6FR6dppH/cqEsLKT6Esa5XASOMJhgftiU2CvjIkVSVlIdTACetnoLLGF92
5
- 6F7lyNgAS4b9PZdg4QFr2Ih04NSxAgMBAAECgYEAg0qy/P40D3WP7VXiszAgPfAR
6
- d3aHYfTVkx9mQSrKP/Y3q/aL2Jw/AviV1PqaBRgZIYoPwrTQhCNX3/pTbtnKvMDr
7
- Py5l9AHGvzWx9ThYV/ErcVNEFUNegTeiIKPcX8jh72s62PVRU0ZYUNPUh2cShZjr
8
- qcLn+QKpxpnuuMPxgDkCQQD7NRFbkfq3Q7lwDN8/GMmBHxv/HOpLdLmWT7ua9OE9
9
- JnVjml89fT31rM9D/YVZaf3kIe6y1xehRhCUfrlhnufnAkEA3Bt0E5DT0/utRgXS
10
- 4xA5LHvnZ0R5mHGPd6m0/3c7uf3epeHUakE3HBvsp9Ys/87hByq/R7QCoTE2MVhg
11
- uSZrpwJAIgeoWE1IN3dXMZSs0XFcKr+6HS8fliUz1ubqNS2jLZN+J4YMDNpggF1u
12
- nnlDjT9Mg5ENMvDsZI6HRHZ+SnkqVQJAApzo0dqkSR3xvqUPDdcBdr+5zYYIk4C1
13
- nUwMdAPsV5bl774wkVpY1yKVuqBWRGsmTLl7L9S5O0SkSg2siEYmfQJBAOEwqhs7
14
- tkLpUpWv3+0V2Lv/0CuXrqgacXxebQ8MfcH9YpWV0M54kJ7u/4gNCXgj66pDAqfE
15
- bU+RhxY82ohb5uo=
16
- -----END PRIVATE KEY-----
data/spec/ssl/client.p12 DELETED
Binary file
@@ -1,28 +0,0 @@
1
- -----BEGIN PRIVATE KEY-----
2
- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC4I1J9AVuytCuy
3
- BlmDQD/ZhJygHhLhGN2ZBPd2mBs0OfnNO2ert9zo5jUaRvHAKhTs6/gmmMd2U39R
4
- TnN4cqHtEVbyDp/97zY4v75rL9iILk8l18qJVSbdsbEdZ9fyuj9MnLNY+J100FVS
5
- jfNIR+mCunVPjI+Mb2tooSOZKovdcTZVZcLVwnnkXsPbDFOZbWp3V0v0vqyYxAQB
6
- sLEypEtt1fzKrL0gevTCsRFYxsUbjdaJmb4E63hKAr+PkrjXT6r6gR4oWjFejoIm
7
- OhEZxm1H6cLwBWK/PM55b7kdV9pNUetXTNz5uTjKx0512rsBC9GZK9rM/wATI1o+
8
- KsXSxuDnAgMBAAECggEAG2OFnXpaPVZ3OV+gaNlhpeUHtvlCLaEZNO18MXOmeDo3
9
- YcN4RB5xCWNUergatU6NFkBzBKqs4HjC80EMA9ppI2301MRAH/E4y3AZzq+rMXZR
10
- 53sVcR/tTARmJ82OXVg+mhKkypMQOJPUXRcoHJQ1s3AwisiJgYYBH+r39IxTiXhQ
11
- vMuiUFHmQSn7TAsDV9ULMvYmMh4FA+9RVW1DJ9zH5/IQKtRyLVupulGimF8n0kVR
12
- tNVqwTckZpJJlZFdLHUjaTiSm4s5vYwoxNzNXxZ0GnBXBxs5YAErEjas/OhmYguZ
13
- lFwpkVuV9/dwR4jfPRciGuRuJqO2I2Pp6K6/Z+QLoQKBgQDmYRNnOfESwaqVWh9G
14
- VmT70bhob5A2GwVS2fJ+UOBCfnwrn+ybR2AZjliKlM4a6k+pboPrwl4rncH2LlXO
15
- o/EX9VyTdDCMxiN+YMlvOuzpVF1LrM/BL6pw3uMjmWBEMmbprwiMFCKRC4BJZ3Vv
16
- X07A1zoKq8oNFW+m80Db1eMciwKBgQDMncDJLJFBqIcas5plUlwTQXmr8Xq/+Q/B
17
- UB4yU75eUbp1H0jFrJ8ier6A1IXX2bVnxUjilATM/trIH4GLMK66j5hp0ih0JfjE
18
- gYnI83GKOxL+KF0C2tLjjhuTAVtmWXla8s37dBtz3ZleyyKfaGzvgm3zjheD+s/R
19
- ordHaRpMlQKBgEOvq9q9TFX9bpf45Y1t3reZ03tjo9Qxtiu0eymfq3P944+Rqhup
20
- KdP4XY1B0RhZVVRrcvj2n2JjNFSXIoDW7APlA/ESxxzlLhJ4b1Zt0qNvNQYB3Pxe
21
- e84zvjp8WqtOv6vS0EkPtWQ2I9ftPLSfJO1FjvkJphCYBrjfaWPtgI+nAoGBAMOS
22
- RKIEJxJKslejMv+FKNx+yHy/4kN7GsP6f+I6iMo986nerP/DbpbWGx+oAgW94NW+
23
- i1uFftExBowhEQCpF1jZxyPd6yyY3p1z8u5PQUaOECk9CymfXdKCEXkA4wuAma2E
24
- Rb0BzPuB4wXnwr/6X6TNVaplNbTAFcKZc/SdULXBAoGBAM02iPIys9ghA1nfQHD+
25
- MD4lJNyPzOrnx1C8SXPP/hHUbFRmZF9hW3U9vuwo7jD2MzIrHAycAaIUjIDkTD+w
26
- rUYsH9nOAHCbk1lGqy24SF4Pcvpj28O4gfHBdBEq4c2b48moml3tJOPOTEude8fp
27
- PgYaeX3y+gzY7K7ZSM+gIuuo
28
- -----END PRIVATE KEY-----
@@ -1,100 +0,0 @@
1
- Certificate:
2
- Data:
3
- Version: 3 (0x2)
4
- Serial Number: 3 (0x3)
5
- Signature Algorithm: sha256WithRSAEncryption
6
- Issuer: C=US, ST=MD, L=Baltimore, CN=Test CA/emailAddress=test@example.com
7
- Validity
8
- Not Before: Nov 29 00:38:23 2014 GMT
9
- Not After : Aug 25 00:38:23 2017 GMT
10
- Subject: C=US, ST=Arizona, L=NA, O=Manticore, OU=Manticore, CN=localhost
11
- Subject Public Key Info:
12
- Public Key Algorithm: rsaEncryption
13
- Public-Key: (2048 bit)
14
- Modulus:
15
- 00:b8:23:52:7d:01:5b:b2:b4:2b:b2:06:59:83:40:
16
- 3f:d9:84:9c:a0:1e:12:e1:18:dd:99:04:f7:76:98:
17
- 1b:34:39:f9:cd:3b:67:ab:b7:dc:e8:e6:35:1a:46:
18
- f1:c0:2a:14:ec:eb:f8:26:98:c7:76:53:7f:51:4e:
19
- 73:78:72:a1:ed:11:56:f2:0e:9f:fd:ef:36:38:bf:
20
- be:6b:2f:d8:88:2e:4f:25:d7:ca:89:55:26:dd:b1:
21
- b1:1d:67:d7:f2:ba:3f:4c:9c:b3:58:f8:9d:74:d0:
22
- 55:52:8d:f3:48:47:e9:82:ba:75:4f:8c:8f:8c:6f:
23
- 6b:68:a1:23:99:2a:8b:dd:71:36:55:65:c2:d5:c2:
24
- 79:e4:5e:c3:db:0c:53:99:6d:6a:77:57:4b:f4:be:
25
- ac:98:c4:04:01:b0:b1:32:a4:4b:6d:d5:fc:ca:ac:
26
- bd:20:7a:f4:c2:b1:11:58:c6:c5:1b:8d:d6:89:99:
27
- be:04:eb:78:4a:02:bf:8f:92:b8:d7:4f:aa:fa:81:
28
- 1e:28:5a:31:5e:8e:82:26:3a:11:19:c6:6d:47:e9:
29
- c2:f0:05:62:bf:3c:ce:79:6f:b9:1d:57:da:4d:51:
30
- eb:57:4c:dc:f9:b9:38:ca:c7:4e:75:da:bb:01:0b:
31
- d1:99:2b:da:cc:ff:00:13:23:5a:3e:2a:c5:d2:c6:
32
- e0:e7
33
- Exponent: 65537 (0x10001)
34
- X509v3 extensions:
35
- X509v3 Subject Key Identifier:
36
- 00:AD:24:E9:F6:F5:82:D6:44:2E:DB:A3:16:75:E4:B9:56:5E:87:55
37
- X509v3 Authority Key Identifier:
38
- keyid:C8:B7:44:26:1E:FA:12:7F:5E:DE:C1:D0:A8:91:36:CE:43:A5:8A:41
39
-
40
- X509v3 Basic Constraints:
41
- CA:FALSE
42
- X509v3 Key Usage:
43
- Digital Signature, Non Repudiation, Key Encipherment
44
- Signature Algorithm: sha256WithRSAEncryption
45
- 99:1b:a2:a5:63:03:22:70:62:4a:ff:3d:c7:46:53:25:9d:4c:
46
- 9c:73:4f:b6:fa:cd:7a:57:cb:96:3b:8f:58:4e:26:b4:30:ea:
47
- 39:25:ad:8f:f9:ce:8c:87:ef:fc:5a:8e:94:3e:37:ac:35:e2:
48
- d1:4f:e2:1c:59:33:4c:19:08:33:53:6b:d3:da:d1:2b:7a:90:
49
- 2a:15:f6:49:4f:95:4a:34:46:a1:a6:43:15:2d:c5:bc:e8:1b:
50
- 9a:1c:bd:f3:01:b1:60:16:5d:7e:1b:52:9c:08:d6:b8:2e:68:
51
- 2c:68:11:65:52:8a:52:fa:86:ee:a7:9f:bc:a7:54:a0:4d:3e:
52
- 78:4a:f6:fb:a5:ed:83:51:68:93:e5:46:c4:c9:30:ff:76:ee:
53
- e3:e6:cd:c6:7f:1f:19:61:01:0d:5e:05:c3:38:fa:c2:dd:c3:
54
- ec:0a:18:5e:bf:66:6b:c1:09:9b:38:47:43:69:09:9f:91:ff:
55
- 4c:2c:71:d9:4a:63:0a:84:68:ef:ac:d3:29:f8:16:dc:d5:3f:
56
- 38:8b:14:a1:a6:00:c2:b4:5d:53:7f:14:ce:fc:74:f4:cc:c2:
57
- ee:9f:b6:9c:22:6c:af:1c:a5:ee:36:f7:ef:f2:02:80:18:69:
58
- eb:ec:bc:03:df:b6:e1:3f:6f:a2:26:57:a0:6b:23:2f:05:bd:
59
- 7a:36:db:41:7f:2e:30:b4:06:a6:47:9d:a7:8a:f3:3b:6e:b8:
60
- b1:86:14:a0:38:2c:64:14:cb:df:4e:b3:47:f4:a0:e1:50:02:
61
- cc:20:db:01:31:77:35:35:e9:ad:2b:f5:4f:f9:40:35:fb:1a:
62
- ad:33:fd:37:7d:e9:52:65:11:df:d6:6a:9e:dd:ed:54:c1:25:
63
- 71:33:08:5b:62:18:67:c8:4e:d6:82:64:f7:d7:3b:b8:9d:5d:
64
- 55:36:fc:6f:da:97:56:48:91:28:e8:fa:38:5f:a3:c6:60:b5:
65
- 35:f0:a9:bf:15:40:d0:fb:3a:42:df:e8:25:82:ff:19:93:a8:
66
- 57:dc:f2:2c:5f:de:1a:13:c6:c9:e3:5d:a8:f7:d9:6e:66:0d:
67
- 3e:fc:ea:59:25:89:2c:ff:91:0e:3e:08:83:25:2f:f2:de:3e:
68
- ec:be:27:64:3c:84:20:20:47:1b:2a:e6:1f:33:6c:15:af:86:
69
- 79:86:a5:0a:12:d3:89:0b:82:b4:98:cc:02:7b:ef:b6:4f:5a:
70
- ef:96:7a:d9:51:dc:b7:41:b4:a3:23:6a:ed:32:22:76:88:b6:
71
- ec:e5:be:cb:a6:98:b3:35:d5:74:7e:5f:1c:97:a3:ac:f6:75:
72
- e0:98:64:57:4c:22:ea:c4:93:37:cb:74:28:c6:a0:fe:eb:ec:
73
- 48:00:cc:06:97:de:82:7c
74
- -----BEGIN CERTIFICATE-----
75
- MIIEnjCCAoagAwIBAgIBAzANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQGEwJVUzEL
76
- MAkGA1UECAwCTUQxEjAQBgNVBAcMCUJhbHRpbW9yZTEQMA4GA1UEAwwHVGVzdCBD
77
- QTEfMB0GCSqGSIb3DQEJARYQdGVzdEBleGFtcGxlLmNvbTAeFw0xNDExMjkwMDM4
78
- MjNaFw0xNzA4MjUwMDM4MjNaMGgxCzAJBgNVBAYTAlVTMRAwDgYDVQQIDAdBcml6
79
- b25hMQswCQYDVQQHDAJOQTESMBAGA1UECgwJTWFudGljb3JlMRIwEAYDVQQLDAlN
80
- YW50aWNvcmUxEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQAD
81
- ggEPADCCAQoCggEBALgjUn0BW7K0K7IGWYNAP9mEnKAeEuEY3ZkE93aYGzQ5+c07
82
- Z6u33OjmNRpG8cAqFOzr+CaYx3ZTf1FOc3hyoe0RVvIOn/3vNji/vmsv2IguTyXX
83
- yolVJt2xsR1n1/K6P0ycs1j4nXTQVVKN80hH6YK6dU+Mj4xva2ihI5kqi91xNlVl
84
- wtXCeeRew9sMU5ltandXS/S+rJjEBAGwsTKkS23V/MqsvSB69MKxEVjGxRuN1omZ
85
- vgTreEoCv4+SuNdPqvqBHihaMV6OgiY6ERnGbUfpwvAFYr88znlvuR1X2k1R61dM
86
- 3Pm5OMrHTnXauwEL0Zkr2sz/ABMjWj4qxdLG4OcCAwEAAaNaMFgwHQYDVR0OBBYE
87
- FACtJOn29YLWRC7boxZ15LlWXodVMB8GA1UdIwQYMBaAFMi3RCYe+hJ/Xt7B0KiR
88
- Ns5DpYpBMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgXgMA0GCSqGSIb3DQEBCwUAA4IC
89
- AQCZG6KlYwMicGJK/z3HRlMlnUycc0+2+s16V8uWO49YTia0MOo5Ja2P+c6Mh+/8
90
- Wo6UPjesNeLRT+IcWTNMGQgzU2vT2tErepAqFfZJT5VKNEahpkMVLcW86BuaHL3z
91
- AbFgFl1+G1KcCNa4LmgsaBFlUopS+obup5+8p1SgTT54Svb7pe2DUWiT5UbEyTD/
92
- du7j5s3Gfx8ZYQENXgXDOPrC3cPsChhev2ZrwQmbOEdDaQmfkf9MLHHZSmMKhGjv
93
- rNMp+Bbc1T84ixShpgDCtF1TfxTO/HT0zMLun7acImyvHKXuNvfv8gKAGGnr7LwD
94
- 37bhP2+iJlegayMvBb16NttBfy4wtAamR52nivM7brixhhSgOCxkFMvfTrNH9KDh
95
- UALMINsBMXc1NemtK/VP+UA1+xqtM/03felSZRHf1mqe3e1UwSVxMwhbYhhnyE7W
96
- gmT31zu4nV1VNvxv2pdWSJEo6Po4X6PGYLU18Km/FUDQ+zpC3+glgv8Zk6hX3PIs
97
- X94aE8bJ412o99luZg0+/OpZJYks/5EOPgiDJS/y3j7svidkPIQgIEcbKuYfM2wV
98
- r4Z5hqUKEtOJC4K0mMwCe++2T1rvlnrZUdy3QbSjI2rtMiJ2iLbs5b7LppizNdV0
99
- fl8cl6Os9nXgmGRXTCLqxJM3y3QoxqD+6+xIAMwGl96CfA==
100
- -----END CERTIFICATE-----
data/spec/ssl/readme.md DELETED
@@ -1,14 +0,0 @@
1
- test_truststore is a trust store which has trusted the cacert.pem certificate
2
-
3
- localhost.pem is a server certificate signed by our test CA
4
-
5
- We can test custom trust stores by:
6
-
7
- 1. Starting a server which uses localhost.pem/localhost.key to serve SSL
8
- 2. Trusting ca_cert.pem (via the test_truststore)
9
-
10
- And then verifying that SSL operations complete successfully.
11
-
12
- The test_truststore password is `test123`
13
-
14
- You should never use these certificates or keys for anything other than testing Manticore's SSL behavior.
Binary file