@@ -10,7 +10,8 @@ use DigestAlgorithm::{Sha1, Sha256, Sha384, Sha512};
10
10
11
11
use futures:: future:: { FutureExt , TryFutureExt } ;
12
12
use ring:: digest;
13
- use rustls:: { ClientConfig , ServerName } ;
13
+ use rustls:: ClientConfig ;
14
+ use rustls:: pki_types:: ServerName ;
14
15
use tokio:: io:: { AsyncRead , AsyncWrite , ReadBuf } ;
15
16
use tokio_postgres:: tls:: { ChannelBinding , MakeTlsConnect , TlsConnect } ;
16
17
use tokio_rustls:: { client:: TlsStream , TlsConnector } ;
44
45
ServerName :: try_from ( hostname)
45
46
. map ( |dns_name| {
46
47
RustlsConnect ( Some ( RustlsConnectData {
47
- hostname : dns_name,
48
+ hostname : dns_name. to_owned ( ) ,
48
49
connector : Arc :: clone ( & self . config ) . into ( ) ,
49
50
} ) )
50
51
} )
55
56
pub struct RustlsConnect ( Option < RustlsConnectData > ) ;
56
57
57
58
struct RustlsConnectData {
58
- hostname : ServerName ,
59
+ hostname : ServerName < ' static > ,
59
60
connector : TlsConnector ,
60
61
}
61
62
@@ -151,30 +152,62 @@ where
151
152
mod tests {
152
153
use super :: * ;
153
154
use futures:: future:: TryFutureExt ;
154
- use rustls:: { client:: ServerCertVerified , client:: ServerCertVerifier , Certificate , Error } ;
155
- use std:: time:: SystemTime ;
156
-
155
+ use rustls:: {
156
+ client:: danger:: ServerCertVerifier ,
157
+ client:: danger:: { HandshakeSignatureValid , ServerCertVerified } ,
158
+ Error , SignatureScheme ,
159
+ } ;
160
+ use rustls:: pki_types:: { CertificateDer , UnixTime } ;
161
+
162
+ #[ derive( Debug ) ]
157
163
struct AcceptAllVerifier { }
158
164
impl ServerCertVerifier for AcceptAllVerifier {
159
165
fn verify_server_cert (
160
166
& self ,
161
- _end_entity : & Certificate ,
162
- _intermediates : & [ Certificate ] ,
163
- _server_name : & ServerName ,
164
- _scts : & mut dyn Iterator < Item = & [ u8 ] > ,
167
+ _end_entity : & CertificateDer < ' _ > ,
168
+ _intermediates : & [ CertificateDer < ' _ > ] ,
169
+ _server_name : & ServerName < ' _ > ,
165
170
_ocsp_response : & [ u8 ] ,
166
- _now : SystemTime ,
171
+ _now : UnixTime ,
167
172
) -> Result < ServerCertVerified , Error > {
168
173
Ok ( ServerCertVerified :: assertion ( ) )
169
174
}
175
+
176
+ fn verify_tls12_signature (
177
+ & self ,
178
+ _message : & [ u8 ] ,
179
+ _cert : & CertificateDer < ' _ > ,
180
+ _dss : & rustls:: DigitallySignedStruct ,
181
+ ) -> Result < rustls:: client:: danger:: HandshakeSignatureValid , Error > {
182
+ Ok ( HandshakeSignatureValid :: assertion ( ) )
183
+ }
184
+
185
+ fn verify_tls13_signature (
186
+ & self ,
187
+ _message : & [ u8 ] ,
188
+ _cert : & CertificateDer < ' _ > ,
189
+ _dss : & rustls:: DigitallySignedStruct ,
190
+ ) -> Result < rustls:: client:: danger:: HandshakeSignatureValid , Error > {
191
+ Ok ( HandshakeSignatureValid :: assertion ( ) )
192
+ }
193
+
194
+ fn supported_verify_schemes ( & self ) -> Vec < SignatureScheme > {
195
+ vec ! [
196
+ SignatureScheme :: ECDSA_NISTP384_SHA384 ,
197
+ SignatureScheme :: ECDSA_NISTP256_SHA256 ,
198
+ SignatureScheme :: RSA_PSS_SHA512 ,
199
+ SignatureScheme :: RSA_PSS_SHA384 ,
200
+ SignatureScheme :: RSA_PSS_SHA256 ,
201
+ SignatureScheme :: ED25519 ,
202
+ ]
203
+ }
170
204
}
171
205
172
206
#[ tokio:: test]
173
207
async fn it_works ( ) {
174
208
env_logger:: builder ( ) . is_test ( true ) . try_init ( ) . unwrap ( ) ;
175
209
176
210
let mut config = rustls:: ClientConfig :: builder ( )
177
- . with_safe_defaults ( )
178
211
. with_root_certificates ( rustls:: RootCertStore :: empty ( ) )
179
212
. with_no_client_auth ( ) ;
180
213
config
0 commit comments