Skip to content

Commit 4296c5a

Browse files
Merge pull request #16 from HatsuneMiku3939/feature/add-support-self-signed-cert
add suport self-signed cert related options
2 parents 4090092 + 8e3bd63 commit 4296c5a

16 files changed

+428
-57
lines changed

README.md

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -112,23 +112,25 @@ You can found more examples in `test/plugin/test_in_http_pull.rb`
112112

113113
## Configuration
114114

115-
### tag (string) (required)
115+
### Basic options
116+
117+
#### tag (string) (required)
116118

117119
The tag of the event.
118120

119-
### url (string) (required)
121+
#### url (string) (required)
120122

121123
The url of remote server.
122124

123-
### agent (string) (optional, default: fluent-plugin-http-pull)
125+
#### agent (string) (optional, default: fluent-plugin-http-pull)
124126

125127
The user agent string of request.
126128

127-
### interval (time) (required)
129+
#### interval (time) (required)
128130

129131
The interval time between periodic request.
130132

131-
### format (required)
133+
#### format (required)
132134

133135
The format of the response body. Due to limitation of current implement it is
134136
always required regardless `status_only` option.
@@ -137,11 +139,11 @@ always required regardless `status_only` option.
137139
[parser article](https://docs.fluentd.org/v0.12/articles/parser-plugin-overview)
138140
for more detail.
139141

140-
### status_only (bool) (optional, default: false)
142+
#### status_only (bool) (optional, default: false)
141143

142144
If `status_only` is true, body is not parsed.
143145

144-
### http_method (enum) (optional, default: :get)
146+
###E http_method (enum) (optional, default: :get)
145147

146148
The http request method for each requests. Avaliable options are listed below.
147149

@@ -151,30 +153,51 @@ The http request method for each requests. Avaliable options are listed below.
151153

152154
If `status_only` is true, `http_method` was override to `head`
153155

154-
### timeout (time) (optional, default: 10s)
156+
#### timeout (time) (optional, default: 10s)
155157

156158
The timeout of each request.
157159

158-
### proxy (string) (optional, default: nil)
160+
### Proxy options`
161+
162+
#### proxy (string) (optional, default: nil)
159163

160164
The HTTP proxy URL to use for each requests
161165

162-
### user (string) (optional, default: nil)
166+
### Basic auth options
167+
168+
#### user (string) (optional, default: nil)
163169

164170
The user for basic auth
165171

166-
### password (string) (optional, default: nil)
172+
#### password (string) (optional, default: nil)
167173

168174
The password for basic auth
169175

170-
### response_header (section) (optional, default: nil)
176+
### Req/Resp header options
177+
178+
#### response_header (section) (optional, default: nil)
171179

172180
The name of response header for capture.
173181

174-
### request_header (section) (optional, default: nil)
182+
#### request_header (section) (optional, default: nil)
175183

176184
The name, value pair of custom reuqest header.
177185

186+
### SSL options
187+
188+
#### verify_ssl (bool) (optional, default: true)
189+
190+
When false, SSL verification is ignored.
191+
192+
#### ca_path (string) (optional, defualt: nil)
193+
194+
The absolute path of directory where ca_file stored. Should be used with `ca_file`.
195+
196+
#### ca_file (string) (optional, defualt: nil)
197+
198+
The Absolute path of ca_file. Should be used with `ca_path`.
199+
200+
178201
## In case of remote error
179202

180203
### Can receive response from remote

fluent-plugin-http-pull.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
33

44
Gem::Specification.new do |spec|
55
spec.name = "fluent-plugin-http-pull"
6-
spec.version = "0.7.0"
6+
spec.version = "0.8.1"
77
spec.authors = ["filepang"]
88
spec.email = ["[email protected]"]
99

lib/fluent/plugin/in_http_pull.rb

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ def initialize
2626
super
2727
end
2828

29+
# basic options
2930
desc 'The tag of the event.'
3031
config_param :tag, :string
3132

@@ -47,15 +48,18 @@ def initialize
4748
desc 'The timeout second of each request'
4849
config_param :timeout, :time, default: 10
4950

51+
# proxy options
5052
desc 'The HTTP proxy URL to use for each requests'
5153
config_param :proxy, :string, default: nil
5254

55+
# basic auth options
5356
desc 'user of basic auth'
5457
config_param :user, :string, default: nil
5558

5659
desc 'password of basic auth'
5760
config_param :password, :string, default: nil
5861

62+
# req/res header options
5963
config_section :response_header, param_name: :response_headers, multi: true do
6064
desc 'The name of header to cature from response'
6165
config_param :header, :string
@@ -69,6 +73,17 @@ def initialize
6973
config_param :value, :string
7074
end
7175

76+
# ssl options
77+
desc 'verify_ssl'
78+
config_param :verify_ssl, :bool, default: true
79+
80+
desc "The absolute path of directory where ca_file stored"
81+
config_param :ca_path, :string, default: nil
82+
83+
desc "The absolute path of ca_file"
84+
config_param :ca_file, :string, default: nil
85+
86+
7287
def configure(conf)
7388
compat_parameters_convert(conf, :parser)
7489
super
@@ -103,6 +118,12 @@ def on_timer
103118
request_options[:user] = @user if @user
104119
request_options[:password] = @password if @password
105120

121+
request_options[:verify_ssl] = @verify_ssl
122+
if @verify_ssl and @ca_path and @ca_file
123+
request_options[:ssl_ca_path] = @ca_path
124+
request_options[:ssl_ca_file] = @ca_file
125+
end
126+
106127
res = RestClient::Request.execute request_options
107128

108129
record["status"] = res.code

test/helper/.ssl/README

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# 1. Generate a Private Key
2+
3+
```
4+
openssl genrsa -aes128 -out server.key 2048
5+
Enter pass phrase : 3939
6+
```
7+
8+
# 2. Generate a CSR (Certificate Signing Request)
9+
10+
```
11+
openssl req -new -key server.key -out server.csr
12+
```
13+
14+
# 3. Remove Passphrase from Key
15+
16+
```
17+
cp server.key server.key.org
18+
openssl rsa -in server.key.org -out server.key
19+
```
20+
21+
# 4. Generating a Self-Signed Certificate
22+
23+
```
24+
openssl x509 -req -days 36500 -in server.csr -signkey server.key -out server.crt
25+
```

test/helper/.ssl/server.crt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIDLDCCAhQCCQCv3Q6dwIpcDDANBgkqhkiG9w0BAQsFADBXMQswCQYDVQQGEwJK
3+
UDEOMAwGA1UECAwFVG9reW8xDjAMBgNVBAcMBVRva3lvMRQwEgYDVQQKDAtIYXRz
4+
dW5lTWlrdTESMBAGA1UEAwwJbG9jYWxob3N0MCAXDTE4MDUyNzA0MDcyN1oYDzIx
5+
MTgwNTAzMDQwNzI3WjBXMQswCQYDVQQGEwJKUDEOMAwGA1UECAwFVG9reW8xDjAM
6+
BgNVBAcMBVRva3lvMRQwEgYDVQQKDAtIYXRzdW5lTWlrdTESMBAGA1UEAwwJbG9j
7+
YWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv1ChrQuEuVEA
8+
2KdEfWbfZ2b+vj7g878AIrVCR6cuc5YzLb79lvJ8lWr9SzuGsiNir+z/1up/dnPf
9+
kdnAK9zm3rnAVkgGGM0WG+uEwOhXRe1yGb2PNMDzj0XzfE77QI6b+SyiHG6FpDrD
10+
sztI9GfyU+dJNxP8ygyJ5Xq7XKlOZ7emW9ceq0I4eNEXmuCriS5zHJr+G61plnX5
11+
vANmalVumKH0nkKAjQxxvs8jlUVO2KESUPq8sSiO1ijBw+aTOTY5qryRCRlNzvzb
12+
uCE8e2FPKogbmO/O9wyL1vW2q9RQFFvg06X6Qf46oQGrisAua8HE7Ny5LoDXaB7N
13+
lM9dNZ8M/QIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQCouD3GnuDy3j/aliTIDIMh
14+
nOHV6maXlJZYki26/HFdaLiLwM1+ghgMtVpRd/JY3w4H7tAz2x7Db5ZKvrCupdpN
15+
rUvCYAk24ZE34s7WktS+OondzSjLCuVseHUBVHIDbpH9yGHRwZ4fm7jaVXq5wpJy
16+
8zKGMBZJH7omNyeV3ulC8GemmzZNpsdy1eS1ajLf8tGUOEBW3E1h+485E4/BqOKz
17+
uGCx8zUgmNxvUt0yUNfYcBWHL+BOr5UWwpQ/qAqx9Hubs8nD1JZNgKpILlSYjMRV
18+
graRRhUHs95AjppvzmCds8jdAQJXgzJ0ZLiRqsKZX2WllJSvrSOZXBlrNdB5tSHa
19+
-----END CERTIFICATE-----

test/helper/.ssl/server.csr

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
-----BEGIN CERTIFICATE REQUEST-----
2+
MIICnDCCAYQCAQAwVzELMAkGA1UEBhMCSlAxDjAMBgNVBAgMBVRva3lvMQ4wDAYD
3+
VQQHDAVUb2t5bzEUMBIGA1UECgwLSGF0c3VuZU1pa3UxEjAQBgNVBAMMCWxvY2Fs
4+
aG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9Qoa0LhLlRANin
5+
RH1m32dm/r4+4PO/ACK1QkenLnOWMy2+/ZbyfJVq/Us7hrIjYq/s/9bqf3Zz35HZ
6+
wCvc5t65wFZIBhjNFhvrhMDoV0Xtchm9jzTA849F83xO+0COm/ksohxuhaQ6w7M7
7+
SPRn8lPnSTcT/MoMieV6u1ypTme3plvXHqtCOHjRF5rgq4kucxya/hutaZZ1+bwD
8+
ZmpVbpih9J5CgI0Mcb7PI5VFTtihElD6vLEojtYowcPmkzk2Oaq8kQkZTc7827gh
9+
PHthTyqIG5jvzvcMi9b1tqvUUBRb4NOl+kH+OqEBq4rALmvBxOzcuS6A12gezZTP
10+
XTWfDP0CAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQAnwC2nOl/tFm47UpXmx1PF
11+
OKLM9JD2P6r5Snp3R5u814FFIwgXJwz6+WTCQLqls28r4OTLK/W3me/m5L4GO/0U
12+
bUsVpYrAmfEbh7DSh1J3KFf7eVTbRpxfj9SvTWXnge2yOnXjDld4iZiqA8azSGi6
13+
YNY5K4AOw9s+y/LBYrLAm5Xa8WkPmF4Ufbf1ErpbvLGl38csJHpi4SZpXG5eVdDS
14+
EJGJG8Tjf+EM8+VeTZ0ct63bkt9TnBgYcHurhuFRJX1thz3epkA4uQi5a8ZDcLe4
15+
LHrHr12SyXuXFJrCT4th2itZjxRY9y8Vr5CFHtcaC7vbUVJDmX2pFRRQAD+4493/
16+
-----END CERTIFICATE REQUEST-----

test/helper/.ssl/server.key

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
-----BEGIN RSA PRIVATE KEY-----
2+
MIIEpAIBAAKCAQEAv1ChrQuEuVEA2KdEfWbfZ2b+vj7g878AIrVCR6cuc5YzLb79
3+
lvJ8lWr9SzuGsiNir+z/1up/dnPfkdnAK9zm3rnAVkgGGM0WG+uEwOhXRe1yGb2P
4+
NMDzj0XzfE77QI6b+SyiHG6FpDrDsztI9GfyU+dJNxP8ygyJ5Xq7XKlOZ7emW9ce
5+
q0I4eNEXmuCriS5zHJr+G61plnX5vANmalVumKH0nkKAjQxxvs8jlUVO2KESUPq8
6+
sSiO1ijBw+aTOTY5qryRCRlNzvzbuCE8e2FPKogbmO/O9wyL1vW2q9RQFFvg06X6
7+
Qf46oQGrisAua8HE7Ny5LoDXaB7NlM9dNZ8M/QIDAQABAoIBAQCmtMkc88OEg8w7
8+
/Y0VxNV40eu6tSnp245vsAiATXKRr9kKzLlGlifvP1pV+xnFEkaFS/wnNxE4k4HG
9+
IrtsvUHD5JJv3LTLWbIhRBnaytp5iY16Vo56BoR1XRvtPxl6yImrF7RvF/OGBtrO
10+
zCMnLYigihJnVxhYq5Jhj4/CD5nNj11L+1A6wb28HHNLYvMh8QSp5+QriZ5Ehugb
11+
a99Y5d/5JoAaDDZpUpmtOMp11pfhM3pRNa55qvckPuCTAT5xcEJbxGpIKWDK+8OL
12+
a83mASrSPp7QRIEpKlQaQF9DoFqBZgKHYsCFebFopA5lBtqO0GlYaXJQCk3tRp5b
13+
/JyBJzK1AoGBAN3tjqcqFKJXfAb9ovtlfjX1KMxZ2ZWwc+CeYzfNTcT42uYdqfSq
14+
7d1RXdfZbJEpLsd+HMeUfIg/R5XWI2jIXa3Qj19LsTpOUZi6o7ceTZZgp2fCYloA
15+
reyAEo5zxCVNjwVYrso5hFHe8nns039qkmytZCwgRuR9PEYusGnmF8rDAoGBANyv
16+
5Aq5btqfrxv+CYmC8Wu2ghFScsxRP++IHEx7wMWfqKztTX0WbMO40/NVmRF/Ntoy
17+
65YtixY+DpnqRD8Sd1CjfwcfqGsPLfpnVkEq2xUPmx2TIAnY1/drap70jJm1mOyd
18+
yWxKQYwdX0ZOAPvQi+snrVQRYADuw7mCcqtTos0/AoGAG2KQAtKvfyTaeiZcMTdh
19+
7piU8zp3HgCLHAGPbrhXy2GF6XVpnnZlKbU7pkH/Ip55VkaamIobH9jnJXcqIWjw
20+
Hl2pA3JcqTw212jYgOUtX8wHfEdBSafhzlgzcf6ZCp1ac6dw0iVszYl8VE1D/+oP
21+
rXdr8AH/nXxSrrpeLIMnFm8CgYEAnjnN+pJxFHahCiTdmaY0idHU965xeGRYvtiL
22+
0Zp44DhUq4eIo0LMwJdn/3NDx/O51D/mAUquCkh8F4aLX91RhpNypBzil7/Oa1Zj
23+
1V1wrmz9/fpaYjUCwvZU/5q+pAY7moqWu/mRfXAhuzp6IhGn//X2o+vBNWn7Eqqg
24+
pI3Wj+kCgYArJJZOj3srjNij++FWtgBmP7/gTdIJNybkpa01ub5vBYDmi77uj0oD
25+
zDCZMwsJ/nRJBJ4a1U7B5VSy36UJN1JvY4xriR+yaOb0ttNb+pEzjSENchsqwcez
26+
8ogUa3vR+xMXy/wQVZrMm00cQktzQbTZI23aNIWKsevJI28wXcBbLQ==
27+
-----END RSA PRIVATE KEY-----

test/helper/.ssl/server.key.org

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
-----BEGIN RSA PRIVATE KEY-----
2+
Proc-Type: 4,ENCRYPTED
3+
DEK-Info: AES-128-CBC,4BBDC20C90C15D774E6E07EDEA6BC54A
4+
5+
/rzYRt/Z0PCttHRYiKVFxMlPjKoOlQSEiRPJKTgAGLYDsZKv4DQL9EN5cVMoSCz4
6+
N+90H4d6ycDa+o/G2U1g79LjKa6REzelSDIjnHDOBT06c1i7859IGZLQNjcI81mW
7+
q38exdgm4VXB9qIjHEbjM0lj6dRlbx7ebfqrNcpm42q/7QgWljjyjVTwfTz4T8CI
8+
CPe+d7d8ukr/CCehtcP3aLOQN6rZ3fVuROdzuQ3lUEdcswbe11RTKZvmMsBLOZ2i
9+
ws4ot/JgXkHjO1oRJk1AUq0i16p3AfQdo/jCVvverMVuuruDxBu5uMefgj03sR8G
10+
Anh3Og8F76JGGgN6HDZmPCuW7MIt7UjV4mBCbARcNVWFEcsnYbeLqcKD6J11IbOm
11+
niXEgWMS+b+YNCYdkbwVhAHftCvRUAaRN1kcPNuc7cX5oEXTILfYzw3cdxiugwNN
12+
7/USXcgmH8R23sDMnZI8gJTjDmynTW8X0ftXLGPmkc6oDZGk6NfRoH9bi+Vue9kj
13+
rjz27Gs/4j7v5s2KigMeTSqx8tCMj0TVmvE4tYjyp9R7xB5lZ4+/uPB9JRoImpAA
14+
5MbgrnPYvyw4vchBs8CBHVG/cy0K75aKX7Efw5oUZ/NObm6cHb8EYU5ODBy08erb
15+
40INhJDcop+YG5ElO06RzEp1CyDM/S9d3L7NatVyDS3Vkd7SKsxoqrNOJ4X+UNeO
16+
swyfmzsXkBvV5bTAql2PPnS1fNrdsTCS1khf2Hbb1OUywAAD2IvakhTANasOcLEU
17+
sU5Wvdqu3EEhiLsTUi0LAXU/vH1WxD0VKQiUpVSpo95Xlrz21QEFOcrEKeCByjIj
18+
AKbYgQDI6p/6OcYIT7q7hG5BKGbskDSz+p3Bu/q68VTMzjHTtJwTj0W+46+nyu9U
19+
Mc5DCUScNXyz8wdrZhbUh12HgyY98Yze87hJ5YKCuo2P6ylm6PNFDctRjMoBTDrX
20+
xLvKWhH0sp8ZTi2MZVdENzuR/w9OuCstkKDvApfFdyhsqSdwW40moa4YfjQVLhgb
21+
ZsKwZodz7fhGYkzGP8aizRJWr3gXLiwwBy+Ko20aVU+8hQmcT6OUV/B5gINY0m7/
22+
Bxeqjiijg7AyCO3ilh3w3LpCOr4Uk9bGQnCMHgi15vH8w9W/akbWRSxCchSwWbBX
23+
fZG8KXSH7h9QNwq19MfHSnDd0mwt7M+oFO3EmZUDHKca5OuVWDEn3JXavQo8jRwT
24+
yWSWFeeits6RIw/XN6c4EKtG+Y0wR1hAxlqPUq40vgEGwTBY4iLbPbgr3v6wXi0x
25+
C054QfBigmx4yNATIB+DGGpEi3EGhfwfSaw7W7gmSL3W9XzKqr4JQBe6azMYWFGF
26+
COZe6FqnKEUJq/5HqChWNvhHl8kic72sjD/fIIadSAVEZ1/e4XegL7GQ7dckyGV6
27+
zKZhtLI+jfiFc5Lcr8wPwvoxb3ez1mAq9MOl77mQGMRDSq+JTnUeG5COt6Gjka9Q
28+
9iqaePPF+rRz65jfYS9FJWI6eL1WyPXu61mbjhkWcnC8GTSBeVNsSXl27m1QIKUv
29+
ftiF57yNlZzxf4wWzbqsRZHbwcC/pEXMwHK415am3yL0sJE8bqtGcz+V6CXXKrFV
30+
-----END RSA PRIVATE KEY-----

test/helper/stub_server.rb

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
require 'webrick'
2+
require 'webrick/https'
23

34
class DeleteService < WEBrick::HTTPServlet::AbstractServlet
45
def service(req, res)
@@ -13,7 +14,10 @@ def service(req, res)
1314
end
1415

1516
class StubServer
16-
def initialize
17+
def initialize(port=3939, ssl_enable=false)
18+
@port = port
19+
@ssl_enable = ssl_enable
20+
1721
create_server
1822

1923
# mount handler
@@ -57,7 +61,19 @@ def create_server
5761
[@log_file, WEBrick::AccessLog::COMBINED_LOG_FORMAT],
5862
]
5963

60-
@server = WEBrick::HTTPServer.new :Port => 3939, :Logger => @log, :AccessLog => @access_log
64+
65+
if @ssl_enable
66+
ssl_basepath = File.join(File.dirname(__FILE__), ".ssl")
67+
@server = WEBrick::HTTPServer.new :Port => @port,
68+
:SSLEnable => true,
69+
:Logger => @log, :AccessLog => @access_log,
70+
:SSLPrivateKey => OpenSSL::PKey::RSA.new(File.open(File.join(ssl_basepath, "server.key")).read),
71+
:SSLCertificate => OpenSSL::X509::Certificate.new(File.open(File.join(ssl_basepath, "server.crt")).read),
72+
:SSLCertName => [["CN", "localhost"]]
73+
else
74+
@server = WEBrick::HTTPServer.new :Port => @port,
75+
:Logger => @log, :AccessLog => @access_log
76+
end
6177
end
6278

6379
def ok(req, res)
@@ -116,4 +132,3 @@ def method_post(req, res)
116132
end
117133
end
118134
end
119-

test/plugin/test_in_http_pull.rb

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ class HttpPullInputTestDefaultOptions < Test::Unit::TestCase
77
sub_test_case "default value of each options" do
88
TEST_DEFAULT_VALUE_CONFIG = %[
99
tag test
10-
url http://127.0.0.1:3939
10+
url http://localhost:3939
1111
1212
interval 3s
1313
format json
@@ -61,6 +61,27 @@ class HttpPullInputTestDefaultOptions < Test::Unit::TestCase
6161

6262
assert_equal("fluent-plugin-http-pull", d.instance.agent)
6363
end
64+
65+
test 'verify_ssl' do
66+
d = create_driver TEST_DEFAULT_VALUE_CONFIG
67+
assert_equal("test", d.instance.tag)
68+
69+
assert_equal(true, d.instance.verify_ssl)
70+
end
71+
72+
test 'ca_path' do
73+
d = create_driver TEST_DEFAULT_VALUE_CONFIG
74+
assert_equal("test", d.instance.tag)
75+
76+
assert_equal(nil, d.instance.ca_path)
77+
end
78+
79+
test 'ca_file' do
80+
d = create_driver TEST_DEFAULT_VALUE_CONFIG
81+
assert_equal("test", d.instance.tag)
82+
83+
assert_equal(nil, d.instance.ca_file)
84+
end
6485
end
6586

6687
private

0 commit comments

Comments
 (0)