Module: OpenSSL::SSL
| Relationships & Source Files | |
| Namespace Children | |
|
Modules:
| |
|
Classes:
| |
|
Exceptions:
| |
| Defined in: | ext/openssl/ossl_ssl.c, ext/openssl/ossl_ssl_session.c, ext/openssl/lib/openssl/ssl.rb |
Overview
Use SSLContext to set up the parameters for a TLS (former SSL) connection. Both client and server TLS connections are supported, SSLSocket and SSLServer may be used in conjunction with an instance of SSLContext to set up connections.
Constant Summary
-
OP_ALL =
# File 'ext/openssl/ossl_ssl.c', line 2943ULONG2NUM(SSL_OP_ALL)
-
OP_ALLOW_NO_DHE_KEX =
# File 'ext/openssl/ossl_ssl.c', line 2952ULONG2NUM(SSL_OP_ALLOW_NO_DHE_KEX)
-
OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION =
# File 'ext/openssl/ossl_ssl.c', line 2958ULONG2NUM(SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION)
-
OP_CIPHER_SERVER_PREFERENCE =
# File 'ext/openssl/ossl_ssl.c', line 2962ULONG2NUM(SSL_OP_CIPHER_SERVER_PREFERENCE)
-
OP_CISCO_ANYCONNECT =
# File 'ext/openssl/ossl_ssl.c', line 2981ULONG2NUM(SSL_OP_CISCO_ANYCONNECT)
-
OP_COOKIE_EXCHANGE =
# File 'ext/openssl/ossl_ssl.c', line 2980ULONG2NUM(SSL_OP_COOKIE_EXCHANGE)
-
OP_CRYPTOPRO_TLSEXT_BUG =
# File 'ext/openssl/ossl_ssl.c', line 2967ULONG2NUM(SSL_OP_CRYPTOPRO_TLSEXT_BUG)
-
OP_DONT_INSERT_EMPTY_FRAGMENTS =
# File 'ext/openssl/ossl_ssl.c', line 2954ULONG2NUM(SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS)
-
OP_EPHEMERAL_RSA =
# File 'ext/openssl/ossl_ssl.c', line 3007
Deprecated in
::OpenSSL1.0.1k and 1.0.2.ULONG2NUM(SSL_OP_EPHEMERAL_RSA)
-
OP_LEGACY_SERVER_CONNECT =
# File 'ext/openssl/ossl_ssl.c', line 2944ULONG2NUM(SSL_OP_LEGACY_SERVER_CONNECT)
-
OP_MICROSOFT_BIG_SSLV3_BUFFER =
# File 'ext/openssl/ossl_ssl.c', line 2993
Deprecated in
::OpenSSL1.1.0.ULONG2NUM(SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER)
-
OP_MICROSOFT_SESS_ID_BUG =
# File 'ext/openssl/ossl_ssl.c', line 2985
Deprecated in
::OpenSSL1.1.0.ULONG2NUM(SSL_OP_MICROSOFT_SESS_ID_BUG)
-
OP_MSIE_SSLV2_RSA_PADDING =
# File 'ext/openssl/ossl_ssl.c', line 2995
Deprecated in
::OpenSSL0.9.7h and 0.9.8b.ULONG2NUM(SSL_OP_MSIE_SSLV2_RSA_PADDING)
-
OP_NETSCAPE_CA_DN_BUG =
# File 'ext/openssl/ossl_ssl.c', line 3015
Deprecated in
::OpenSSL1.1.0.ULONG2NUM(SSL_OP_NETSCAPE_CA_DN_BUG)
-
OP_NETSCAPE_CHALLENGE_BUG =
# File 'ext/openssl/ossl_ssl.c', line 2987
Deprecated in
::OpenSSL1.1.0.ULONG2NUM(SSL_OP_NETSCAPE_CHALLENGE_BUG)
-
OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG =
# File 'ext/openssl/ossl_ssl.c', line 3017
Deprecated in
::OpenSSL1.1.0.ULONG2NUM(SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG)
-
OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG =
# File 'ext/openssl/ossl_ssl.c', line 2989
Deprecated in
::OpenSSL0.9.8q and 1.0.0c.ULONG2NUM(SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG)
-
OP_NO_COMPRESSION =
# File 'ext/openssl/ossl_ssl.c', line 2957ULONG2NUM(SSL_OP_NO_COMPRESSION)
-
OP_NO_ENCRYPT_THEN_MAC =
# File 'ext/openssl/ossl_ssl.c', line 2960ULONG2NUM(SSL_OP_NO_ENCRYPT_THEN_MAC)
-
OP_NO_QUERY_MTU =
# File 'ext/openssl/ossl_ssl.c', line 2979ULONG2NUM(SSL_OP_NO_QUERY_MTU)
-
OP_NO_RENEGOTIATION =
# File 'ext/openssl/ossl_ssl.c', line 2965ULONG2NUM(SSL_OP_NO_RENEGOTIATION)
-
OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION =
# File 'ext/openssl/ossl_ssl.c', line 2956ULONG2NUM(SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION)
-
OP_NO_SSLv2 =
# File 'ext/openssl/ossl_ssl.c', line 3009
Deprecated in
::OpenSSL1.1.0.ULONG2NUM(SSL_OP_NO_SSLv2)
-
OP_NO_SSLv3 =
# File 'ext/openssl/ossl_ssl.c', line 2969ULONG2NUM(SSL_OP_NO_SSLv3)
-
OP_NO_TICKET =
# File 'ext/openssl/ossl_ssl.c', line 2955ULONG2NUM(SSL_OP_NO_TICKET)
-
OP_NO_TLSv1 =
# File 'ext/openssl/ossl_ssl.c', line 2970ULONG2NUM(SSL_OP_NO_TLSv1)
-
OP_NO_TLSv1_1 =
# File 'ext/openssl/ossl_ssl.c', line 2971ULONG2NUM(SSL_OP_NO_TLSv1_1)
-
OP_NO_TLSv1_2 =
# File 'ext/openssl/ossl_ssl.c', line 2972ULONG2NUM(SSL_OP_NO_TLSv1_2)
-
OP_NO_TLSv1_3 =
# File 'ext/openssl/ossl_ssl.c', line 2974ULONG2NUM(SSL_OP_NO_TLSv1_3)
-
OP_PKCS1_CHECK_1 =
# File 'ext/openssl/ossl_ssl.c', line 3011
Deprecated in
::OpenSSL1.0.1.ULONG2NUM(SSL_OP_PKCS1_CHECK_1)
-
OP_PKCS1_CHECK_2 =
# File 'ext/openssl/ossl_ssl.c', line 3013
Deprecated in
::OpenSSL1.0.1.ULONG2NUM(SSL_OP_PKCS1_CHECK_2)
-
OP_SAFARI_ECDHE_ECDSA_BUG =
# File 'ext/openssl/ossl_ssl.c', line 2949ULONG2NUM(SSL_OP_SAFARI_ECDHE_ECDSA_BUG)
-
OP_SINGLE_DH_USE =
# File 'ext/openssl/ossl_ssl.c', line 3005
Deprecated in
::OpenSSL1.1.0.ULONG2NUM(SSL_OP_SINGLE_DH_USE)
-
OP_SINGLE_ECDH_USE =
# File 'ext/openssl/ossl_ssl.c', line 3003
Deprecated in
::OpenSSL1.1.0.ULONG2NUM(SSL_OP_SINGLE_ECDH_USE)
-
OP_SSLEAY_080_CLIENT_DH_BUG =
# File 'ext/openssl/ossl_ssl.c', line 2997
Deprecated in
::OpenSSL1.1.0.ULONG2NUM(SSL_OP_SSLEAY_080_CLIENT_DH_BUG)
-
OP_SSLREF2_REUSE_CERT_TYPE_BUG =
# File 'ext/openssl/ossl_ssl.c', line 2991
Deprecated in
::OpenSSL1.0.1h and 1.0.2.ULONG2NUM(SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG)
-
OP_TLSEXT_PADDING =
# File 'ext/openssl/ossl_ssl.c', line 2946ULONG2NUM(SSL_OP_TLSEXT_PADDING)
-
OP_TLS_BLOCK_PADDING_BUG =
# File 'ext/openssl/ossl_ssl.c', line 3001
Deprecated in
::OpenSSL1.1.0.ULONG2NUM(SSL_OP_TLS_BLOCK_PADDING_BUG)
-
OP_TLS_D5_BUG =
# File 'ext/openssl/ossl_ssl.c', line 2999
Deprecated in
::OpenSSL1.1.0.ULONG2NUM(SSL_OP_TLS_D5_BUG)
-
OP_TLS_ROLLBACK_BUG =
# File 'ext/openssl/ossl_ssl.c', line 2963ULONG2NUM(SSL_OP_TLS_ROLLBACK_BUG)
-
SSL2_VERSION =
# File 'ext/openssl/ossl_ssl.c', line 3025
SSL2.0INT2NUM(SSL2_VERSION)
-
SSL3_VERSION =
# File 'ext/openssl/ossl_ssl.c', line 3027
SSL3.0INT2NUM(SSL3_VERSION)
-
TLS1_1_VERSION =
# File 'ext/openssl/ossl_ssl.c', line 3031
TLS 1.1
INT2NUM(TLS1_1_VERSION)
-
TLS1_2_VERSION =
# File 'ext/openssl/ossl_ssl.c', line 3033
TLS 1.2
INT2NUM(TLS1_2_VERSION)
-
TLS1_3_VERSION =
# File 'ext/openssl/ossl_ssl.c', line 3036
TLS 1.3
INT2NUM(TLS1_3_VERSION)
-
TLS1_VERSION =
# File 'ext/openssl/ossl_ssl.c', line 3029
TLS 1.0
INT2NUM(TLS1_VERSION)
-
VERIFY_CLIENT_ONCE =
# File 'ext/openssl/ossl_ssl.c', line 2941INT2NUM(SSL_VERIFY_CLIENT_ONCE)
-
VERIFY_FAIL_IF_NO_PEER_CERT =
# File 'ext/openssl/ossl_ssl.c', line 2940INT2NUM(SSL_VERIFY_FAIL_IF_NO_PEER_CERT)
-
VERIFY_NONE =
# File 'ext/openssl/ossl_ssl.c', line 2938INT2NUM(SSL_VERIFY_NONE)
-
VERIFY_PEER =
# File 'ext/openssl/ossl_ssl.c', line 2939INT2NUM(SSL_VERIFY_PEER)
Class Method Summary
- .verify_certificate_identity(cert, hostname) mod_func
- .verify_hostname(hostname, san) mod_func Internal use only
- .verify_wildcard(domain_component, san_component) mod_func Internal use only
Class Method Details
.verify_certificate_identity(cert, hostname) (mod_func)
[ GitHub ]# File 'ext/openssl/lib/openssl/ssl.rb', line 269
def verify_certificate_identity(cert, hostname) should_verify_common_name = true cert.extensions.each{|ext| next if ext.oid != "subjectAltName" ostr = OpenSSL::ASN1.decode(ext.to_der).value.last sequence = OpenSSL::ASN1.decode(ostr.value) sequence.value.each{|san| case san.tag when 2 # dNSName in GeneralName (RFC5280) should_verify_common_name = false return true if verify_hostname(hostname, san.value) when 7 # iPAddress in GeneralName (RFC5280) should_verify_common_name = false if san.value.size == 4 || san.value.size == 16 begin return true if san.value == IPAddr.new(hostname).hton rescue IPAddr::InvalidAddressError end end end } } if should_verify_common_name cert.subject.to_a.each{|oid, value| if oid == "CN" return true if verify_hostname(hostname, value) end } end return false end
.verify_hostname(hostname, san) (mod_func)
# File 'ext/openssl/lib/openssl/ssl.rb', line 302
def verify_hostname(hostname, san) # :nodoc: # RFC 5280, IA5String is limited to the set of ASCII characters return false unless san.ascii_only? return false unless hostname.ascii_only? # See RFC 6125, section 6.4.1 # Matching is case-insensitive. san_parts = san.downcase.split(".") # TODO: this behavior should probably be more strict return san == hostname if san_parts.size < 2 # Matching is case-insensitive. host_parts = hostname.downcase.split(".") # RFC 6125, section 6.4.3, subitem 2. # If the wildcard character is the only character of the left-most # label in the presented identifier, the client SHOULD NOT compare # against anything but the left-most label of the reference # identifier (e.g., *.example.com would match foo.example.com but # not bar.foo.example.com or example.com). return false unless san_parts.size == host_parts.size # RFC 6125, section 6.4.3, subitem 1. # The client SHOULD NOT attempt to match a presented identifier in # which the wildcard character comprises a label other than the # left-most label (e.g., do not match bar.*.example.net). return false unless verify_wildcard(host_parts.shift, san_parts.shift) san_parts.join(".") == host_parts.join(".") end
.verify_wildcard(domain_component, san_component) (mod_func)
# File 'ext/openssl/lib/openssl/ssl.rb', line 335
def verify_wildcard(domain_component, san_component) # :nodoc: parts = san_component.split("*", -1) return false if parts.size > 2 return san_component == domain_component if parts.size == 1 # RFC 6125, section 6.4.3, subitem 3. # The client SHOULD NOT attempt to match a presented identifier # where the wildcard character is embedded within an A-label or # U-label of an internationalized domain name. return false if domain_component.start_with?("xn--") && san_component != "*" parts[0].length + parts[1].length < domain_component.length && domain_component.start_with?(parts[0]) && domain_component.end_with?(parts[1]) end