Classe: Mongo::Socket::OcspVerifier Private

Herda:
Objeto
  • Objeto
mostrar tudo
Inclui:
Logável
Definido em:
lib/mongo/socket/ocsp_verifier.rb

Visão geral

Esta classe faz parte de uma API privada. Evite usar essa classe, se possível, pois ela pode ser removida ou alterada no futuro.

Verificador de endpoint OCSP.

Depois que uma conexão TLS é estabelecida, esse verificador inspeciona o certificado apresentado pelo servidor e, se o certificado contiver um URI OCSP, executa a solicitação de status OCSP para o URI especificado (seguindo até 5 redirecionamentos) para verificar o status do certificado.

Definido sob namespace

Classes: Resposta

Resumo constante

Constantes incluídas do Loggable

Loggable::Prefix

Recolhimento do Resumo do atributo de instância

Recolhimento do Resumo do método de instância

Métodos incluídos no Loggable

#log_debug, #log_error, #log_fatal, #log_info, #log_WARN, #logger

Detalhes do construtor

#initialize(host_name, cert, ca_cert, cert_store, **opts) ➤ OcspVerifier

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Retorna uma nova instância do OcspVerifier.

Parâmetros:

  • host_name (string)

    O nome do host que está sendo verificado, para saída de diagnóstico.

  • cert (OpenSSL::X509::Certificate)

    O certificado apresentado pelo servidor em host_name.

  • ca_cert (OpenSSL::X509::Certificate)

    O certificado CA apresentado pelo servidor ou resolvido localmente a partir do certificado do servidor.

  • cert_store (OpenSSL::X509::Store)

    O armazenamento de certificados a ser usado para verificar a resposta do OCSP. Este deve ser o mesmo armazenamento usado no SSLContext usado com o SSLSocket para o qual estamos verificando o certificado. Este NÃO deve ser o certificado CA fornecido pelo servidor (ou seja, qualquer coisa retirada de peer_cert) - caso contrário, o servidor ditaria em quais autoridades de CA o cliente confia.

Desde:

  • 2.0.0



64
65
66
67
68
69
70
# Arquivo 'lib/mongo/socket/ocsp_verifier.rb', linha 64

def inicializar(host_name, cert, ca_cert, cert_store, **opciona)
  @host_name = host_name
  @cert = cert
  @ca_cert = ca_cert
  @cert_store = cert_store
  @opções = opciona
end

Detalhes do atributo da instância

#ca_cert ➤ Objeto (somente leitura)

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Desde:

  • 2.0.0



72
73
74
# Arquivo 'lib/mongo/socket/ocsp_verifier.rb', linha 72

def ca_cert
  @ca_cert
end

#certObject (somente leitura)

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Desde:

  • 2.0.0



72
73
74
# Arquivo 'lib/mongo/socket/ocsp_verifier.rb', linha 72

def cert
  @cert
end

#cert_store ➤ Objeto (somente leitura)

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Desde:

  • 2.0.0



72
73
74
# Arquivo 'lib/mongo/socket/ocsp_verifier.rb', linha 72

def cert_store
  @cert_store
end

#host_nameObject (somente leitura)

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Desde:

  • 2.0.0



72
73
74
# Arquivo 'lib/mongo/socket/ocsp_verifier.rb', linha 72

def host_name
  @host_name
end

#opções Objeto (somente leitura)

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Desde:

  • 2.0.0



72
73
74
# Arquivo 'lib/mongo/socket/ocsp_verifier.rb', linha 72

def opções
  @opções
end

Detalhes do método de instância

#cert_id ➤ Objeto

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Desde:

  • 2.0.0



100
101
102
103
104
105
106
# Arquivo 'lib/mongo/socket/ocsp_verifier.rb', linha 100

def cert_id
  @cert_id ||= OpenSSL::OCSP::CertificateId.Novo(
    cert,
    ca_cert,
    OpenSSL::Digest.Novo('SHA1')
  )
end

#ocsp_uris ➤ Array<String>

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Retorna URIs OCSP no certificado de servidor especificado.

Retorna:

  • (Array<String>)

    URIs de OCSP no certificado de servidor especificado.

Desde:

  • 2.0.0



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# Arquivo 'lib/mongo/socket/ocsp_verifier.rb', linha 79

def ocsp_uris
  @ocsp_uris ||= começar
    # https://tools.ietf.org/html/rfc3546#section-2.3
    # proíbe várias extensões com o mesmo oid.
    ext = cert.Extensões.detectar fazer |ext|
      ext.vazio == 'AuthorityInfoAccess'
    end

    se ext
      # Nossos certificados de teste têm vários URIs OCSP.
      ext.valor.dividir("\n").selecione fazer |linha|
        linha.start_with?('OCSP - URI:')
      end.map fazer |linha|
        linha.dividir(':', 2).último
      end
    mais
      []
    end
  end
end

#timeoutObject

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Desde:

  • 2.0.0



74
75
76
# Arquivo 'lib/mongo/socket/ocsp_verifier.rb', linha 74

def timeout
  opções[:timeout] || 5
end

#verifytrue | false

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Retorna se o certificado foi verificado.

Retorna:

  • (verdadeiro | falso)

    Se o certificado foi verificado.

Aumenta:

Desde:

  • 2.0.0



127
128
129
130
131
132
133
134
# Arquivo 'lib/mongo/socket/ocsp_verifier.rb', linha 127

def verificar
  handle_Exceptions fazer
    Método false se ocsp_uris.vazio?

    res, errors = do_verify
    return_ocsp_response(res, errors)
  end
end

#verify_with_cache ➤ Objeto

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Desde:

  • 2.0.0



108
109
110
111
112
113
114
115
116
117
118
119
120
121
# Arquivo 'lib/mongo/socket/ocsp_verifier.rb', linha 108

def verify_with_cache
  handle_Exceptions fazer
    Método false se ocsp_uris.vazio?

    res = OcspCache.obter(cert_id)
    Método return_ocsp_response(res) se res

    res, errors = do_verify

    OcspCache.set(cert_id, res) se res

    return_ocsp_response(res, errors)
  end
end