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 +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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
-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
-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
-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
-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
-
VCY/wlkGy36U0Bijuatoh4dr3ivxNERz6yq7O97vlrsq4zFBG8VRQbATh/APTFBQ
|
14
|
-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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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
|
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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
-
HPbrSJPT9aYQLnNhPs1becp8YZ2jykRGpafXH2BMumw+4ijxve9RQmOWqlJ9KiKJ
|
10
|
-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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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
-
56zqcGfMvepYkOTUoNGdQ3KYjc3Te6S86nLEO8pgcdOvtLcuS8Z9SsJOSWdgPBI9
|
22
|
-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
-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
-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
-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
-
8qToF8+GH1tO3wb3FQayQTR0EbWGJH984MXmKRgiQsNtjvcJa957+vYX41ldoq7R
|
27
|
-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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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
|
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
|