@@ -619,7 +619,7 @@ mod openssl {
619619 use std:: sync:: Arc ;
620620 use std:: time:: Duration ;
621621
622- use openssl:: ssl:: { Ssl , SslContext , SslStream , SslMethod , SSL_VERIFY_NONE } ;
622+ use openssl:: ssl:: { Ssl , SslContext , SslStream , SslMethod , SSL_VERIFY_NONE , SSL_VERIFY_PEER , SSL_OP_NO_SSLV2 , SSL_OP_NO_SSLV3 } ;
623623 use openssl:: ssl:: error:: StreamError as SslIoError ;
624624 use openssl:: ssl:: error:: SslError ;
625625 use openssl:: x509:: X509FileType ;
@@ -651,11 +651,10 @@ mod openssl {
651651
652652 impl Default for OpensslClient {
653653 fn default ( ) -> OpensslClient {
654- OpensslClient ( SslContext :: new ( SslMethod :: Sslv23 ) . unwrap_or_else ( |e| {
655- // if we cannot create a SslContext, that's because of a
656- // serious problem. just crash.
657- panic ! ( "{}" , e)
658- } ) )
654+ let mut ctx = SslContext :: new ( SslMethod :: Sslv23 ) . unwrap ( ) ;
655+ ctx. set_default_verify_paths ( ) . unwrap ( ) ;
656+ ctx. set_options ( SSL_OP_NO_SSLV2 | SSL_OP_NO_SSLV3 ) ;
657+ OpensslClient ( ctx)
659658 }
660659 }
661660
@@ -664,8 +663,10 @@ mod openssl {
664663 type Stream = SslStream < T > ;
665664
666665 fn wrap_client ( & self , stream : T , host : & str ) -> :: Result < Self :: Stream > {
667- let ssl = try!( Ssl :: new ( & self . 0 ) ) ;
666+ let mut ssl = try!( Ssl :: new ( & self . 0 ) ) ;
668667 try!( ssl. set_hostname ( host) ) ;
668+ let host = host. to_owned ( ) ;
669+ ssl. set_verify_callback ( SSL_VERIFY_PEER , move |p, x| :: openssl_verify:: verify_callback ( & host, p, x) ) ;
669670 SslStream :: connect ( ssl, stream) . map_err ( From :: from)
670671 }
671672 }
0 commit comments