File tree Expand file tree Collapse file tree 3 files changed +12
-6
lines changed Expand file tree Collapse file tree 3 files changed +12
-6
lines changed Original file line number Diff line number Diff line change 1212
1313require "openssl/buffering"
1414require "io/nonblock"
15+ require "ipaddr"
1516
1617module OpenSSL
1718 module SSL
@@ -272,11 +273,11 @@ def verify_certificate_identity(cert, hostname)
272273 return true if verify_hostname ( hostname , san . value )
273274 when 7 # iPAddress in GeneralName (RFC5280)
274275 should_verify_common_name = false
275- # follows GENERAL_NAME_print() in x509v3/v3_alt.c
276- if san . value . size == 4
277- return true if san . value . unpack ( 'C*' ) . join ( '.' ) == hostname
278- elsif san . value . size == 16
279- return true if san . value . unpack ( 'n*' ) . map { | e | sprintf ( "%X" , e ) } . join ( ':' ) == hostname
276+ if san . value . size == 4 || san . value . size == 16
277+ begin
278+ return true if san . value == IPAddr . new ( hostname ) . hton
279+ rescue IPAddr :: InvalidAddressError
280+ end
280281 end
281282 end
282283 }
Original file line number Diff line number Diff line change @@ -17,6 +17,7 @@ Gem::Specification.new do |spec|
1717
1818 spec . required_ruby_version = ">= 2.3.0"
1919
20+ spec . add_runtime_dependency "ipaddr"
2021 spec . add_development_dependency "rake"
2122 spec . add_development_dependency "rake-compiler"
2223 spec . add_development_dependency "test-unit" , "~> 3.0"
Original file line number Diff line number Diff line change @@ -516,8 +516,12 @@ def test_verify_certificate_identity
516516 assert_equal ( true , OpenSSL ::SSL . verify_certificate_identity ( cert , "www.example.com\0 .evil.com" ) )
517517 assert_equal ( false , OpenSSL ::SSL . verify_certificate_identity ( cert , '192.168.7.255' ) )
518518 assert_equal ( true , OpenSSL ::SSL . verify_certificate_identity ( cert , '192.168.7.1' ) )
519- assert_equal ( false , OpenSSL ::SSL . verify_certificate_identity ( cert , '13::17' ) )
519+ assert_equal ( true , OpenSSL ::SSL . verify_certificate_identity ( cert , '13::17' ) )
520+ assert_equal ( false , OpenSSL ::SSL . verify_certificate_identity ( cert , '13::18' ) )
520521 assert_equal ( true , OpenSSL ::SSL . verify_certificate_identity ( cert , '13:0:0:0:0:0:0:17' ) )
522+ assert_equal ( false , OpenSSL ::SSL . verify_certificate_identity ( cert , '44:0:0:0:0:0:0:17' ) )
523+ assert_equal ( true , OpenSSL ::SSL . verify_certificate_identity ( cert , '0013:0000:0000:0000:0000:0000:0000:0017' ) )
524+ assert_equal ( false , OpenSSL ::SSL . verify_certificate_identity ( cert , '1313:0000:0000:0000:0000:0000:0000:0017' ) )
521525 end
522526 end
523527
You can’t perform that action at this time.
0 commit comments