Pergunta

Estou construindo uma aplicação e estou pensando em usar OpenSSL para proteger transferências de dados.

Estou pensando em ter apenas a validar cliente o certificado do servidor. Estou confuso sobre como eu deveria garantir o certificado do servidor. Gostaria de criptografar o certificado do servidor que contém a chave privada, mas eu não quero usar quaisquer chaves codificadas duras para essa criptografia.

O que são algumas das práticas comuns seguido de aplicações que empregam SSL?

Foi útil?

Solução

Apenas para se certificar de que temos nossa terminologia direto, um "certificado SSL" na linguagem comum é realmente composto por dois componentes:

  • Um certificado público
  • A chave privada

O componente certificado público é assinado pelo seu CA escolhido (autoridade de certificação), após o que pode ser distribuído livremente. Ele não precisam ser protegidos ou criptografados, e na verdade ele será enviado para clientes que se conectam ao seu servidor como parte da negociação SSL.

O componente chave privada deve ser protegida. Na maioria dos casos, isso é simplesmente armazenado como um arquivo criptografado no servidor. soluções de luxo usar dedicado "inviolável" hardware criptográfico (HSMs - módulos de segurança de hardware) para armazenar a chave privada. Estes variam de soluções baseadas em smart-card para multi-chave, rede habilitada aparelhos com m / n controles etc etc Existem riscos (para não mencionar os custos) associados com HSMs que eu não vou entrar aqui.

Muitas aplicações simplesmente reter a chave privada no disco. Há um par de opções para proteger o arquivo de chave:

  • confiar no sistema e segurança de permissão de arquivo (ou seja, não chave privada criptografar). Por exemplo, a maioria dos daemons ssh fazer isso.
  • Use qualquer mecanismo de seu servidor fornece para criptografar o arquivo - criptografia protegida por senha é um recurso padrão na maioria dos servidores web. (Se você está rolando o seu próprio usando a API do OpenSSL, escolher um dos principais formatos nativos óbvias).

Como sempre, há um trade-off de segurança. Em particular, se você estiver usando criptografia protegida por senha no arquivo de chave privada e você experimenta um inesperado reinicialização do aplicativo (por exemplo, falta de energia), então alguém terá de estar disponível para fornecer a senha para o aplicativo como ele é reiniciado. Armazenar a senha em um arquivo que é lido por scripts de inicialização do sistema (como incentivada por pelo menos dois fornecedores de servidores web) acrescenta pouco em termos de segurança real. É difícil recomendar deixando o arquivo de chave privada não criptografada, mas se você é o único admin / techy em uma pequena loja, você deve definitivamente considerar o que poderia acontecer se o servidor for reinicializado quando você não está disponível, eo que os custos podem ser para o seu negócio .

Outras dicas

não é completamente certo o que você está tentando fazer. o certificado de servidor é enviado a você, o cliente; validar o certificado, verificando sua assinatura A chave que você tem a partir do CA é o lado público (uso SHA-1 não MD5, MD5 foi quebrado.); o CA eo titular da cert servidor manter suas chaves privadas para si. Você pode validar o certificado porque a chave pública é suficiente para descriptografar uma mensagem que tem sido criptografado com a chave privada. Então você não precisa se preocupar, no lado ciente, sobre como manter o certificado criptografado em tudo.

Tenha um olhar para o href="http://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_handshake_in_detail" rel="nofollow noreferrer"> artigo .

Estou confuso sobre como eu deveria garantir o certificado do servidor.

Você não tem que garantir o certificado do servidor. É um documento público

Gostaria de criptografar o certificado do servidor que contém a chave privada

O certificado do servidor não contém a chave privada.

mas eu não quero usar quaisquer chaves codificadas duras para essa criptografia.

Você não precisa fazer qualquer criptografia. O único ativo servidor você precisa para proteger é a sua chave privada, que é inteiramente distinto do seu certificado. No caso do OpenSSL pode até ser um arquivo diferente.

scroll top