@@ -9,7 +9,8 @@ use std::{
9
9
10
10
use futures:: future:: { FutureExt , TryFutureExt } ;
11
11
use ring:: digest;
12
- use rustls:: { ClientConfig , ServerName } ;
12
+ use rustls:: ClientConfig ;
13
+ use rustls_pki_types:: ServerName ;
13
14
use tokio:: io:: { AsyncRead , AsyncWrite , ReadBuf } ;
14
15
use tokio_postgres:: tls:: { ChannelBinding , MakeTlsConnect , TlsConnect } ;
15
16
use tokio_rustls:: { client:: TlsStream , TlsConnector } ;
39
40
ServerName :: try_from ( hostname)
40
41
. map ( |dns_name| {
41
42
RustlsConnect ( Some ( RustlsConnectData {
42
- hostname : dns_name,
43
+ hostname : dns_name. to_owned ( ) ,
43
44
connector : Arc :: clone ( & self . config ) . into ( ) ,
44
45
} ) )
45
46
} )
50
51
pub struct RustlsConnect ( Option < RustlsConnectData > ) ;
51
52
52
53
struct RustlsConnectData {
53
- hostname : ServerName ,
54
+ hostname : ServerName < ' static > ,
54
55
connector : TlsConnector ,
55
56
}
56
57
@@ -130,30 +131,62 @@ where
130
131
mod tests {
131
132
use super :: * ;
132
133
use futures:: future:: TryFutureExt ;
133
- use rustls:: { client:: ServerCertVerified , client:: ServerCertVerifier , Certificate , Error } ;
134
- use std:: time:: SystemTime ;
135
-
134
+ use rustls:: {
135
+ client:: danger:: ServerCertVerifier ,
136
+ client:: danger:: { HandshakeSignatureValid , ServerCertVerified } ,
137
+ Error , SignatureScheme ,
138
+ } ;
139
+ use rustls_pki_types:: { CertificateDer , UnixTime } ;
140
+
141
+ #[ derive( Debug ) ]
136
142
struct AcceptAllVerifier { }
137
143
impl ServerCertVerifier for AcceptAllVerifier {
138
144
fn verify_server_cert (
139
145
& self ,
140
- _end_entity : & Certificate ,
141
- _intermediates : & [ Certificate ] ,
142
- _server_name : & ServerName ,
143
- _scts : & mut dyn Iterator < Item = & [ u8 ] > ,
146
+ _end_entity : & CertificateDer < ' _ > ,
147
+ _intermediates : & [ CertificateDer < ' _ > ] ,
148
+ _server_name : & ServerName < ' _ > ,
144
149
_ocsp_response : & [ u8 ] ,
145
- _now : SystemTime ,
150
+ _now : UnixTime ,
146
151
) -> Result < ServerCertVerified , Error > {
147
152
Ok ( ServerCertVerified :: assertion ( ) )
148
153
}
154
+
155
+ fn verify_tls12_signature (
156
+ & self ,
157
+ _message : & [ u8 ] ,
158
+ _cert : & CertificateDer < ' _ > ,
159
+ _dss : & rustls:: DigitallySignedStruct ,
160
+ ) -> Result < rustls:: client:: danger:: HandshakeSignatureValid , Error > {
161
+ Ok ( HandshakeSignatureValid :: assertion ( ) )
162
+ }
163
+
164
+ fn verify_tls13_signature (
165
+ & self ,
166
+ _message : & [ u8 ] ,
167
+ _cert : & CertificateDer < ' _ > ,
168
+ _dss : & rustls:: DigitallySignedStruct ,
169
+ ) -> Result < rustls:: client:: danger:: HandshakeSignatureValid , Error > {
170
+ Ok ( HandshakeSignatureValid :: assertion ( ) )
171
+ }
172
+
173
+ fn supported_verify_schemes ( & self ) -> Vec < SignatureScheme > {
174
+ vec ! [
175
+ SignatureScheme :: ECDSA_NISTP384_SHA384 ,
176
+ SignatureScheme :: ECDSA_NISTP256_SHA256 ,
177
+ SignatureScheme :: RSA_PSS_SHA512 ,
178
+ SignatureScheme :: RSA_PSS_SHA384 ,
179
+ SignatureScheme :: RSA_PSS_SHA256 ,
180
+ SignatureScheme :: ED25519 ,
181
+ ]
182
+ }
149
183
}
150
184
151
185
#[ tokio:: test]
152
186
async fn it_works ( ) {
153
187
env_logger:: builder ( ) . is_test ( true ) . try_init ( ) . unwrap ( ) ;
154
188
155
189
let mut config = rustls:: ClientConfig :: builder ( )
156
- . with_safe_defaults ( )
157
190
. with_root_certificates ( rustls:: RootCertStore :: empty ( ) )
158
191
. with_no_client_auth ( ) ;
159
192
config
0 commit comments