Skip to content

Commit 7380004

Browse files
committed
Allow PKCS8 EC private keys to be loaded
Signed-off-by: Tero Saarni <[email protected]>
1 parent f2cdc0b commit 7380004

File tree

6 files changed

+44
-9
lines changed

6 files changed

+44
-9
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
- Added support for RFC5424 structured data [#67](https://github.com/logstash-plugins/logstash-output-syslog/pull/67)
44
- The SNI (Server Name Indication) extension is now used when connecting to syslog server with TLS and `host` is set to FQDN (Fully Qualified Domain Name) [#66](https://github.com/logstash-plugins/logstash-output-syslog/pull/66)
55
- Add support for CRL to check for the server certificate is revocation status [#62](https://github.com/logstash-plugins/logstash-output-syslog/pull/62)
6+
- Support loading of PKCS8 EC private keys [#61](https://github.com/logstash-plugins/logstash-output-syslog/pull/61)
67

78
## 3.0.5
89
- Docs: Set the default_codec doc attribute.

lib/logstash/outputs/syslog.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ def setup_ssl
246246
require "openssl"
247247
ssl_context = OpenSSL::SSL::SSLContext.new
248248
ssl_context.cert = OpenSSL::X509::Certificate.new(File.read(@ssl_cert))
249-
ssl_context.key = OpenSSL::PKey::RSA.new(File.read(@ssl_key),@ssl_key_passphrase)
249+
ssl_context.key = OpenSSL::PKey::read(File.read(@ssl_key),@ssl_key_passphrase)
250250
if @ssl_verify
251251
cert_store = OpenSSL::X509::Store.new
252252
# Load the system default certificate path to the store

spec/fixtures/certs.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,6 @@ subject: cn=client
3232
issuer: cn=ca
3333
key_type: RSA
3434
---
35+
subject: cn=client-ec
36+
issuer: cn=ca
37+
key_type: EC

spec/fixtures/client-ec-key.pem

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg6P7i1NqXVKChh8dR
3+
pqHcCSwlxDjKoaDBGiYzWHgy5vqhRANCAAQSX1YGFCuXL7f5Utp5X45+h7ixghyQ
4+
vhYfT4gY6M31DAUaf59DENYUZ36k4IYrWP6lU/ChBH0Mlntjb1TCD+Tw
5+
-----END PRIVATE KEY-----

spec/fixtures/client-ec.pem

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIICCjCB86ADAgECAggXhLgPAPW4dzANBgkqhkiG9w0BAQsFADANMQswCQYDVQQD
3+
EwJjYTAeFw0yMzA5MTQwODU1MzRaFw0yNDA5MTMwODU1MzRaMBQxEjAQBgNVBAMT
4+
CWNsaWVudC1lYzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABBJfVgYUK5cvt/lS
5+
2nlfjn6HuLGCHJC+Fh9PiBjozfUMBRp/n0MQ1hRnfqTghitY/qVT8KEEfQyWe2Nv
6+
VMIP5PCjMzAxMA4GA1UdDwEB/wQEAwIFoDAfBgNVHSMEGDAWgBRNukfgtxJMkwu7
7+
XMvQ8ETWqi5BVTANBgkqhkiG9w0BAQsFAAOCAQEAP+HsEKYA2d6kCAH/JJSpxMnP
8+
gwMfjDkmV1bMguYSoOv8fbD17WqpyRojhi+THInP6ggXhJW0Zbz6UNy2GHXtO4+o
9+
OGLKI2FMUnaLRDMF4NL//FcC1unRQxyw8HQ2oMPNtWVEoo8KURLe0IW2q9/afT89
10+
59RAZYxizFKSWcoIQGeCoyWzVIa/E+MB4cFKgpTF3zkxr6uWJvXYYwkVtzknsGvW
11+
v0c2h2Ck//kuQatJSZQpbMaYMEE2480VnwskiOTu1ltxrmcQxz5P0g1zcjEnKQAm
12+
kB3ENdewzHIq8yaybbf+a/WCsNyyEjKPOsSWeElk77v719B24x1HqkV8FW/eRA==
13+
-----END CERTIFICATE-----

spec/outputs/syslog_tls_spec.rb

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -109,29 +109,42 @@
109109
context "read PEM" do
110110
let(:options) { { "host" => "localhost", "port" => port, "protocol" => "ssl-tcp", "ssl_verify" => true } }
111111

112-
context "invalid client certificate" do
112+
context "RSA certificate and private key" do
113113
let(:options ) { super().merge(
114-
"ssl_cert" => File.join(FIXTURES_PATH, "invalid.pem"),
114+
"ssl_cert" => File.join(FIXTURES_PATH, "client.pem"),
115115
"ssl_key" => File.join(FIXTURES_PATH, "client-key.pem"),
116116
"ssl_cacert" => File.join(FIXTURES_PATH, "ca.pem"),
117117
"ssl_crl" => File.join(FIXTURES_PATH, "ca-crl.pem")
118118
) }
119119

120-
it "register raises error" do
121-
expect { subject.register }.to raise_error(OpenSSL::X509::CertificateError, /malformed PEM data/)
120+
it "register succeeds" do
121+
expect { subject.register }.not_to raise_error
122122
end
123123
end
124124

125-
context "invalid client private key" do
125+
context "EC certificate and private key" do
126126
let(:options ) { super().merge(
127-
"ssl_cert" => File.join(FIXTURES_PATH, "client.pem"),
128-
"ssl_key" => File.join(FIXTURES_PATH, "invalid.pem"),
127+
"ssl_cert" => File.join(FIXTURES_PATH, "client-ec.pem"),
128+
"ssl_key" => File.join(FIXTURES_PATH, "client-ec-key.pem"),
129+
"ssl_cacert" => File.join(FIXTURES_PATH, "ca.pem"),
130+
"ssl_crl" => File.join(FIXTURES_PATH, "ca-crl.pem")
131+
) }
132+
133+
it "register succeeds" do
134+
expect { subject.register }.not_to raise_error
135+
end
136+
end
137+
138+
context "invalid client certificate" do
139+
let(:options ) { super().merge(
140+
"ssl_cert" => File.join(FIXTURES_PATH, "invalid.pem"),
141+
"ssl_key" => File.join(FIXTURES_PATH, "client-key.pem"),
129142
"ssl_cacert" => File.join(FIXTURES_PATH, "ca.pem"),
130143
"ssl_crl" => File.join(FIXTURES_PATH, "ca-crl.pem")
131144
) }
132145

133146
it "register raises error" do
134-
expect { subject.register }.to raise_error(OpenSSL::PKey::RSAError, /Neither PUB key nor PRIV key/)
147+
expect { subject.register }.to raise_error(OpenSSL::X509::CertificateError, /malformed PEM data/)
135148
end
136149
end
137150

0 commit comments

Comments
 (0)