Skip to content

Commit 7e48593

Browse files
committed
Check domain for openssl wrapper
Also update the expired certs we were using.
1 parent f769d0b commit 7e48593

9 files changed

Lines changed: 78 additions & 86 deletions

File tree

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,5 @@ before_script:
1111
- "./.travis/setup.sh"
1212
script:
1313
- cargo test
14-
- cargo test --features "uuid rustc-serialize time unix_socket serde_json chrono openssl bit-vec eui48"
14+
- cargo test --features "uuid rustc-serialize time unix_socket serde_json chrono with-openssl bit-vec eui48"
1515
- (test $TRAVIS_RUST_VERSION != "nightly" || cargo test --features nightly)

.travis/server.crt

Lines changed: 20 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,24 @@
1-
Certificate:
2-
Data:
3-
Version: 3 (0x2)
4-
Serial Number:
5-
9a:e5:7a:5f:05:5a:2f:e4
6-
Signature Algorithm: sha1WithRSAEncryption
7-
Issuer: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd, CN=localhost
8-
Validity
9-
Not Before: Dec 5 21:50:46 2015 GMT
10-
Not After : Jan 4 21:50:46 2016 GMT
11-
Subject: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd, CN=localhost
12-
Subject Public Key Info:
13-
Public Key Algorithm: rsaEncryption
14-
RSA Public Key: (1024 bit)
15-
Modulus (1024 bit):
16-
00:f1:9b:b6:24:64:66:bf:5e:da:77:2a:39:bd:39:
17-
93:56:28:26:f1:d7:1f:c9:60:1c:e3:82:a4:07:a2:
18-
0f:c8:d6:68:fc:30:2f:17:30:34:69:cd:d8:f1:e7:
19-
c7:84:f9:c5:90:b1:2c:42:d5:23:20:d2:1d:d7:18:
20-
15:70:0a:a3:1d:c7:2e:df:03:c0:9f:5c:cb:02:25:
21-
da:7d:2b:1a:09:78:e5:23:8a:c4:64:39:59:0d:4e:
22-
15:0b:75:7b:75:f9:8a:4c:c3:9d:f9:31:08:d5:da:
23-
00:a5:db:0c:df:09:e5:e4:14:d1:17:0f:bb:f6:cf:
24-
bd:3c:5d:14:6a:cb:c1:dc:e1
25-
Exponent: 65537 (0x10001)
26-
X509v3 extensions:
27-
X509v3 Subject Key Identifier:
28-
9E:09:C0:D1:1E:0E:07:B3:49:57:0A:49:47:F9:8A:5F:4E:FE:23:75
29-
X509v3 Authority Key Identifier:
30-
keyid:9E:09:C0:D1:1E:0E:07:B3:49:57:0A:49:47:F9:8A:5F:4E:FE:23:75
31-
DirName:/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=localhost
32-
serial:9A:E5:7A:5F:05:5A:2F:E4
33-
34-
X509v3 Basic Constraints:
35-
CA:TRUE
36-
Signature Algorithm: sha1WithRSAEncryption
37-
4c:3b:c6:42:96:75:96:a0:9b:f5:d9:b1:9b:1b:4f:bd:d2:8d:
38-
f1:53:ed:87:80:f5:7b:5d:36:6e:38:c8:ae:1a:58:e5:39:9e:
39-
42:49:12:35:76:ab:0f:fa:b1:1f:4e:b1:85:f3:a3:6f:60:e3:
40-
6c:0e:a8:95:0d:c8:38:7f:e3:e3:ff:64:74:73:50:46:65:83:
41-
5f:1a:72:f9:69:44:07:cd:36:01:90:b9:b3:ed:d8:d7:bc:68:
42-
97:dd:11:ac:2b:ec:5d:a4:d4:d5:e8:8b:60:12:54:b9:c4:5f:
43-
00:f8:ce:5b:72:28:58:43:7c:d5:25:b7:dd:ec:71:da:aa:3a:
44-
f2:6c
451
-----BEGIN CERTIFICATE-----
46-
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
23+
NmFaAhoxnXA=
6224
-----END CERTIFICATE-----

.travis/server.der

261 Bytes
Binary file not shown.

.travis/server.key

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,27 @@
11
-----BEGIN RSA PRIVATE KEY-----
2-
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
1527
-----END RSA PRIVATE KEY-----

.travis/setup.sh

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,11 @@ psql -U postgres < setup.sql
88
sudo cp pg_hba.conf $(psql -U postgres -c "SHOW hba_file" -At)
99

1010
DATA_DIR=$(psql -U postgres -c "SHOW data_directory" -At)
11-
PG_PID=$(sudo head -n1 $DATA_DIR/postmaster.pid)
12-
sudo kill -SIGHUP $PG_PID
11+
CONFIG_FILE=$(psql -U postgres -c "SHOW config_file" -At)
12+
sudo install -m 0600 -o postgres server.crt $DATA_DIR
13+
sudo install -m 0600 -o postgres server.key $DATA_DIR
14+
sudo bash -c "echo ssl_cert_file = \\'server.crt\\' >> $CONFIG_FILE"
15+
sudo bash -c "echo ssl_key_file = \\'server.key\\' >> $CONFIG_FILE"
16+
17+
sudo service postgresql stop
18+
sudo service postgresql start 9.4

Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ path = "tests/test.rs"
2222

2323
[features]
2424
nightly = []
25+
with-openssl = ["openssl", "openssl-verify"]
2526

2627
[dependencies]
2728
bufstream = "0.1"
@@ -32,6 +33,7 @@ hex = "0.2"
3233
rustc-serialize = { version = "0.3", optional = true }
3334
chrono = { version = "0.2.14", optional = true }
3435
openssl = { version = ">= 0.6.4, < 0.8", optional = true }
36+
openssl-verify = { version = "0.1", optional = true }
3537
serde_json = { version = ">= 0.6, < 0.9", optional = true }
3638
time = { version = "0.1.14", optional = true }
3739
unix_socket = { version = "0.5", optional = true }

src/io/mod.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,14 @@ use std::error::Error;
55
use std::io::prelude::*;
66
use std::fmt;
77

8-
#[cfg(feature = "openssl")]
8+
#[cfg(feature = "with-openssl")]
99
mod openssl;
1010
#[cfg(feature = "security-framework")]
1111
mod security_framework;
1212

13+
#[cfg(all(feature = "openssl", not(feature = "with-openssl")))]
14+
const _CHECK: OpensslFeatureRenamedSeeDocs = "";
15+
1316
/// A trait implemented by SSL adaptors.
1417
pub trait StreamWrapper: fmt::Debug + Read + Write + Send {
1518
/// Returns a reference to the underlying `Stream`.
@@ -21,8 +24,8 @@ pub trait StreamWrapper: fmt::Debug + Read + Write + Send {
2124

2225
/// A trait implemented by types that can negotiate SSL over a Postgres stream.
2326
///
24-
/// If the `openssl` Cargo feature is enabled, this trait will be implemented
25-
/// for `openssl::ssl::SslContext`.
27+
/// If the `with-openssl` Cargo feature is enabled, this trait will be
28+
/// implemented for `openssl::ssl::SslContext`.
2629
///
2730
/// If the `security-framework` Cargo feature is enabled, this trait will be
2831
/// implemented for `security_framework::secure_transport::ClientBuilder`.

src/io/openssl.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
extern crate openssl;
2+
extern crate openssl_verify;
23

34
use std::error::Error;
45

5-
use self::openssl::ssl::{SslContext, SslStream};
6+
use self::openssl::ssl::{IntoSsl, SslContext, SslStream, SSL_VERIFY_PEER};
7+
use self::openssl_verify::verify_callback;
68
use io::{StreamWrapper, Stream, NegotiateSsl};
79

810
impl StreamWrapper for SslStream<Stream> {
@@ -17,10 +19,13 @@ impl StreamWrapper for SslStream<Stream> {
1719

1820
impl NegotiateSsl for SslContext {
1921
fn negotiate_ssl(&self,
20-
_: &str,
22+
domain: &str,
2123
stream: Stream)
2224
-> Result<Box<StreamWrapper>, Box<Error + Send + Sync>> {
23-
let stream = try!(SslStream::connect(self, stream));
25+
let domain = domain.to_owned();
26+
let mut ssl = try!(self.into_ssl());
27+
ssl.set_verify_callback(SSL_VERIFY_PEER, move |p, x| verify_callback(&domain, p, x));
28+
let stream = try!(SslStream::connect(ssl, stream));
2429
Ok(Box::new(stream))
2530
}
2631
}

tests/test.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
#[macro_use]
22
extern crate postgres;
33
extern crate url;
4-
#[cfg(feature = "openssl")]
4+
#[cfg(feature = "with-openssl")]
55
extern crate openssl;
66
#[cfg(feature = "security-framework")]
77
extern crate security_framework;
88

9-
#[cfg(feature = "openssl")]
9+
#[cfg(feature = "with-openssl")]
1010
use openssl::ssl::{SslContext, SslMethod};
1111
use std::thread;
1212
use std::io;
@@ -663,18 +663,20 @@ fn test_cancel_query() {
663663
}
664664

665665
#[test]
666-
#[cfg(feature = "openssl")]
666+
#[cfg(feature = "with-openssl")]
667667
fn test_require_ssl_conn() {
668-
let ctx = SslContext::new(SslMethod::Sslv23).unwrap();
668+
let mut ctx = SslContext::new(SslMethod::Sslv23).unwrap();
669+
ctx.set_CA_file(".travis/server.crt").unwrap();
669670
let conn = or_panic!(Connection::connect("postgres://postgres@localhost",
670671
SslMode::Require(&ctx)));
671672
or_panic!(conn.execute("SELECT 1::VARCHAR", &[]));
672673
}
673674

674675
#[test]
675-
#[cfg(feature = "openssl")]
676+
#[cfg(feature = "with-openssl")]
676677
fn test_prefer_ssl_conn() {
677-
let ctx = SslContext::new(SslMethod::Sslv23).unwrap();
678+
let mut ctx = SslContext::new(SslMethod::Sslv23).unwrap();
679+
ctx.set_CA_file(".travis/server.crt").unwrap();
678680
let conn = or_panic!(Connection::connect("postgres://postgres@localhost",
679681
SslMode::Prefer(&ctx)));
680682
or_panic!(conn.execute("SELECT 1::VARCHAR", &[]));

0 commit comments

Comments
 (0)