manticore 0.4.1-java → 0.4.2-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/.gitignore +1 -0
- data/.travis.yml +7 -1
- data/CHANGELOG.md +9 -1
- data/Gemfile +2 -1
- data/README.md +13 -1
- data/Rakefile +30 -1
- data/lib/manticore.rb +12 -0
- data/lib/manticore/client.rb +9 -10
- data/lib/manticore/java_extensions.rb +20 -0
- data/lib/manticore/response.rb +31 -11
- data/lib/manticore/version.rb +1 -1
- data/spec/manticore/client_spec.rb +47 -14
- data/spec/manticore/response_spec.rb +4 -0
- data/spec/spec_helper.rb +5 -4
- metadata +6 -23
- metadata.gz.sig +3 -2
- data/spec/ssl/ca_cert.crt +0 -0
- data/spec/ssl/ca_cert.pem +0 -31
- data/spec/ssl/ca_key.pem +0 -52
- data/spec/ssl/client.crt +0 -22
- data/spec/ssl/client.key +0 -16
- data/spec/ssl/client.p12 +0 -0
- data/spec/ssl/localhost.key +0 -28
- data/spec/ssl/localhost.pem +0 -100
- data/spec/ssl/readme.md +0 -14
- data/spec/ssl/test_truststore +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e81862fe8dbfe629fdc9dbe09504e2214b3de702
|
4
|
+
data.tar.gz: 5b840aa1a038b4eab593e248b3a679ec6d16fc67
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
## v0.4
|
2
2
|
|
3
|
-
### v0.4.
|
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
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
|
-
|
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'
|
data/lib/manticore/client.rb
CHANGED
@@ -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
|
-
|
467
|
-
|
468
|
-
|
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
|
data/lib/manticore/response.rb
CHANGED
@@ -45,22 +45,35 @@ module Manticore
|
|
45
45
|
@called = true
|
46
46
|
begin
|
47
47
|
@client.execute @request, self, @context
|
48
|
-
|
49
|
-
|
50
|
-
rescue Java::
|
51
|
-
ex = Manticore::
|
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
|
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
|
56
|
+
ex = Manticore::ClientProtocolException
|
57
57
|
rescue Java::JavaNet::UnknownHostException => e
|
58
|
-
ex = Manticore::ResolutionFailure
|
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
|
data/lib/manticore/version.rb
CHANGED
@@ -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/
|
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/
|
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/
|
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/
|
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/
|
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/
|
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
|
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/
|
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
|
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::
|
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::
|
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/
|
97
|
-
|
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/
|
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.
|
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-
|
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
|
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.
|
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
|
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
|
-
|
2
|
-
|
1
|
+
B1PbЇX�"��bu�9�ds��76�\����L�W�k(x?�>ok�B�.����)�E�8a������3[�z��y��3]�9��Op46�*$���z����k��Q��P`ƚq|i�V��y�+,~�SJ��R�iF
|
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
|
-
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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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
-
EevfU/qEhza94032tCVqvVXu1X11PJEQRWmZ7s5ovEW119h5N9cMlHBaAOJbls3S
|
10
|
-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
-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
-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
-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
-
7tWJDlQImqEfVnWCv8bEy4kkTBz260iT0/WmEC5zYT7NW3nKfGGdo8pERqWn1x9g
|
15
|
-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
-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
-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
-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
-
BgkqhkiG9w0BAQUFAAOCAgEAVQw+V+dP73ZMUeSd2WqL7flPfUM7T0T52Amtw2zD
|
20
|
-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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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
|
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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
-
Nlg60fgx6Z3n2e4acmAdnspYD5ZxW+IcSp7N2UlNgju5bns7fLmcsqzTC9SqhacB
|
19
|
-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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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
-
YWBKCx0AwjQ4Sf6DQc8Rald79myBfHlPqjkGpYIWvJpga9gajGf/CrHHB4guBDlY
|
40
|
-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
-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
-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
-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
-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
-
O+asA1ZhdK0BUUMrf3FSmKRwChRxSv7L4kCEFXlUftUrHM4E+ZJFLpr/hXkQih9w
|
46
|
-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
-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
-
WKlu0bSFOunlz8mlYlgpKpHdTjGjPDulDC1/SHWGMoqnO43Hv+5t+tT6cjEN2+SD
|
49
|
-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
-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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
|
data/spec/ssl/localhost.key
DELETED
@@ -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-----
|
data/spec/ssl/localhost.pem
DELETED
@@ -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.
|
data/spec/ssl/test_truststore
DELETED
Binary file
|