Criando minha própria CA para uma intranet

Eu preciso criar minha própria CA para uma intranet e, infelizmente, parece que não há uma boa resposta sobre isso em Segurança. SE.

Existem muitos recursos online sobre isso, mas todos eles são diferentes e alguns usam padrões desatualizados (MD5 / SHA1, etc) que não parecem tão confiáveis. Existem também centenas de variações diferentes de openssl.cnf, variando de um arquivo de 10 linhas ao enorme que veio por padrão com minha distribuição.

Eu gostaria uma resposta canônica sobre a configuração de uma CA simples para emitir certificados de servidor e certificados de cliente.

Aparentemente, parece que algumas pessoas ainda não entendem que não sou uma grande empresa onde um comprometimento da CA causa bilhões de perdas e não pode ser mitigado facilmente, então deixe-me explicar um pouco melhor porque eu preciso da CA:

  • vários servidores conectados por links inseguros (a Internet ) preciso me comunicar com segurança.

  • Preciso de uma maneira de me identificar para esses servidores para realizar tarefas administrativas, sem precisar ir e voltar para o meu gerenciador de senhas a cada 10 segundos.

  • nenhum outro CA além do meu deve ser capaz de personificar qualquer um dos servidores, não importa o quão improvável seja ( mas possível ) que é .

Pronto. Minha própria PKI e um certificado instalado em cada máquina parecem atender às necessidades perfeitamente. Um dos softwares que uso também requer o uso de uma PKI, portanto, apenas usar certificados autoassinados não é uma opção.

Para comprometer a PKI, alguém precisaria comprometer minha máquina de trabalho, e se isso Feito isso, o invasor já pode causar muitos danos sem nem mesmo tocar na PKI (já que eu estaria logando via SSH no servidor a partir desta máquina de qualquer maneira). Esse é um risco que aceito correr, e esta PKI não adiciona mais risco do que já existe.

Comentários

  • echo "Abandon all hope, ye who enter here."
  • @KristoferA It ‘ s para uma intranet, ‘ é mais do que razoável criar sua própria CA para uma rede corporativa.
  • A propósito, o que ‘ está acontecendo com as migrações para Superuser ou ServerFault? O ‘ uso do OpenSSL está perfeitamente no tópico aqui?
  • ” … um certificado autoassinado é um certificado assinado por uma autoridade não conhecida pela maioria dos sistemas. ” Não. Um certificado autoassinado é aquele em que a chave pública, atributos de política e atributos de identidade foram assinados pela chave privada correspondente à chave pública vinculada pela assinatura. Embora não tenha absolutamente nada a ver com o fato de o certificado vir de uma fonte conhecida, é verdade – por definição – que todos os certificados raiz são autoassinados. A diferença é que um certificado raiz está habilitado para assinatura, mas não para criptografia, o que o torna inútil como certificado pessoal para um aplicativo ou servidor.
  • O que Andr é está dizendo é que o software envolvido proíbe especificamente certificados autoassinados como certificados pessoais e que os certificados de cliente e servidor devem compartilhar uma CA comum. Embora esses requisitos sejam incomuns, eles são perfeitamente válidos. No entanto, o que está sendo solicitado é mais sobre a política, como ” o comprimento do caminho do certificado raiz não deve ser maior que x ” e ” o certificado pessoal deve conter o sinalizador isCA=No e um comprimento de caminho igual a zero. ” Infelizmente, as políticas nas quais se baseia a maior parte da confiança no sistema, como revogação, higiene do namespace e segurança de raiz, não são ‘ t abordadas em openssl.cnf.

Resposta

Se sua infraestrutura for minúscula , muitos dos detalhes da execução de uma CA (por exemplo, CRLs e outros) podem provavelmente ser ignorados. Em vez disso, você só precisa se preocupar com a assinatura de certificados.

Existem várias ferramentas que gerenciarão esse processo para você. Até escrevi uma há muitos anos. Mas a que recomendo se você quer algo realmente simples é easy-rsa do projeto OpenVPN. É um wrapper muito fino em torno da ferramenta de linha de comando OpenSSL. Se você vai gerenciar MUITOS certificados e realmente lidar com revogação e outras coisas, vai querer um utilitário muito mais complexo e completo. Já foram fornecidas sugestões mais do que suficientes, então, em vez disso, vou apenas me limitar ao que você está tentando realizar.

Mas aqui está o procedimento básico. Vou explicá-lo com o OpenSSL , mas qualquer sistema servirá.

Comece criando sua CA “raiz” – será um certificado autoassinado. Existem várias maneiras de fazer isso; esta é uma. Faremos nosso um certificado de 10 anos com uma chave de 2048 bits.Ajuste os números conforme apropriado. Você mencionou que estava preocupado com o algoritmo de hash, então adicionei -sha256 para garantir que seja assinado com algo aceitável. Estou criptografando a chave usando AES-256, mas isso é opcional . Você será solicitado a preencher o nome do certificado e outros itens; esses detalhes não são particularmente importantes para uma CA raiz.

# First create the key (use 4096-bits if that"s what floats your boat) openssl genrsa -aes256 -out root.key 2048 # Then use that key to generate a self-signed cert openssl req -new -x509 -key root.key -out root.cer -days 3652 -sha256 

Se você criptografou a chave na primeira etapa, terá que fornecer a senha para use-o no segundo. Verifique o certificado gerado para certificar-se de que em “Restrições básicas” você vê “CA: TRUE”. Essa é realmente a única parte importante com a qual você deve se preocupar:

openssl x509 -text < root.cer 

Legal. OK, agora vamos assinar um certificado. Precisamos de outra chave e, desta vez, de uma solicitação. Você será questionado sobre seu nome e endereço novamente. Os campos que você preenche e o que fornece depende de você e de sua aplicação, mas o campo que mais importa é o “Nome Comum”. É aqui que você fornece seu nome de host ou nome de login ou o que quer que este certificado ateste.

# Create new key openssl genrsa -aes256 -out client1.key 2048 # Use that key to generate a request openssl req -new -key client1.key -out client1.req # Sign that request to generate a new cert openssl x509 -req -in client1.req -out client1.cer -CA root.cer -CAkey root.key -sha256 -CAcreateserial 

Observe que isso cria um arquivo chamado root.srl para mantenha nossos números de série corretos. O sinalizador -CAcreateserial diz ao openssl para criar este arquivo, então você o fornece para a primeira solicitação que você assinar e nunca mais. E mais uma vez, você pode ver onde para adicionar o argumento -sha256.

Esta abordagem – fazer tudo manualmente – não é, em minha opinião, a melhor ideia. Se você estiver executando uma operação considerável , então você provavelmente desejará uma ferramenta que possa rastrear todos os seus certificados para você.

Em vez disso, meu objetivo aqui foi mostrar que a saída que você deseja – os certificados assinados da maneira que você deseja eles – não depende das ferramentas que você usa, mas das opções que você fornece a essas ferramentas. A maioria das ferramentas pode gerar uma grande variedade de configurações, fortes e fracas, e depende de você fornecer os números que você precisa m apropriado. Padrões desatualizados são normais para o curso.

Comentários

  • É ‘ importante notar que quando você assina um certificado de cliente, é apenas a parte pública . Nenhuma chave privada deve ser transmitida ou gerada pela CA.
  • Você poderia expandir sua resposta sobre a criação de um certificado CA intermediário? Obrigado.
  • @Andr é Certos intermediários são apenas certificados normais com basicConstraints = CA:TRUE definido em seus atributos estendidos. Nada mágico, apenas mais um certificado.
  • @tylerl Cara, você é demais.
  • Essa resposta é FANTÁSTICA e foi muito útil, mas tenho uma atualização de 2017 para adicionar. O Chrome e outros agora exigem a extensão x509v3 subjectAlternativeName; caso contrário, eles consideram o certificado inválido, mesmo com um certificado raiz CA instalado corretamente no sistema. Lutei por algum tempo para encontrar a solução certa. Esta página foi inestimável para mim e resolveu a última peça do quebra-cabeça para mim: cmrg.fifthhorseman.net/wiki/SubjectAltName . IMO, adicionar o SAN ao assinar, ao contrário de ao solicitar, é mais fácil e mais parecido com o que as CAs públicas realmente fazem.

Resposta

Se você realmente deseja ser um CA, leve em consideração as implicações de segurança de fazê-lo.

  1. A chave privada usada para gerar a CA raiz para sua intranet deve literalmente ser trancado em um cofre. E o acesso ao referido cofre deve ser monitorado fisicamente.
  2. Usar uma CA raiz autoassinada força seus usuários a não apenas confiar que você está realizando a devida diligência com a proteção segura de chaves, mas também a inserir uma raiz inicialmente não confiável podem entrar em sua cadeia de certificados.
  3. Isso também quebra a funcionalidade de grampeamento OSCP em relação à verificação externa da cadeia de certificados, que é a razão pela qual os serviços de gerenciamento de identidade existem.

Alguns argumentariam o raciocínio por trás do gerenciamento de sua própria CA, como; é para uma intranet corporativa onde parte de nossas compilações de desktop inclui o ca raiz ou é para um pequeno número de usuários.

Embora não seja necessariamente errado fazer isso e possa trazer alguns benefícios, negue a cadeia de verificação para a qual o gerenciamento de identidade baseado em certificado foi criado.

Se você decidir implementar seu próprio ca root, certifique-se de seguir as mesmas práticas de segurança que qualquer outro ca root usa. a última coisa que você gostaria que acontecesse é que alguém comprometesse a chave privada usada para seu root ca e comece a assinar certificados para campanhas de phishing contra seus clientes.

Existem toneladas de guias de melhores práticas disponíveis para isso, NIST ( instituto nacional de padrões e tecnologia) é um grupo colaborativo que auxilia em vários padrões para tópicos de segurança de computador.

Leitura recomendada:
Auditoria (PDF)
Recuperação de desastres (PDF)
Sistemas de chave pública (PDF)
Sans institute relacionado implantações de PKI menores

Ok, vejo que você atualizou sua pergunta para ser mais específico.

Dois documentos para configurar seu arquivo openssl.cnf para especificações de CA:

https://www.openssl.org/docs/apps/ca.html

https://www.openssl.org/docs/apps/config.html

Sei que essa pode não ser a resposta que você deseja, mas porque o ambiente e os requisitos de cada pessoa são diferentes, você vai tem que definir um escopo para sua implementação de CA para um bom exemplo de configuração.

Comentários

  • Há ‘ não há razão para que sua própria CA possa ‘ não fazer OCSP. Até mesmo a linha de comando OpenSSL pode fazer isso, e isso ‘ s sobre a barra mais baixa possível.
  • os links do openssl agora são 404

Resposta

Lá não há maneira de fazer isso simplesmente. existem algumas ferramentas que podem ajudá-lo a começar facilmente.

como:

nenhum deles é um PKI completa além de possivelmente EJBCA, mas isso não é fácil de configurar.

  • XCA é uma pequena ferramenta de front-end para obter uma interface gráfica para gerar, assinar e revogar certificados.
  • EJBCA ou Enterprise Java Beans Certificate Authority é um JBOSS / Jetty Webapp que pode fazer a infraestrutura PKI completa para uma empresa.
  • openssl é a ferramenta básica de linha de comando. ele pode fazer todos os bits offline de uma CA, mas nenhuma verificação (pronto para uso). você pode fazer seus próprios verificadores OCSP com ele, mas precisa criar o código “online” para ele sozinho.

Se tudo o que você procura é a configuração apropriada do openssl. O XCA pode ajudá-lo a gerá-los. (tem um recurso de exportação de configuração do openssl

Comentários

  • EJBCA agora tem uma imagem de VM que você pode usar. Caso contrário, ” não é trivial configurar ” pode ser considerado um eufemismo. É basicamente um enorme ant script que tenta configurar o ( JBoss) servidor de aplicativos que pode (e no meu caso irá ) quebrar.
  • a imagem da VM é ou para fins de avaliação, então eu não a recomendo para um servidor de produção.
  • Posso pesquisar XCA. EJBCA definitivamente não é ‘ uma opção – uma interface da web adiciona uma superfície de ataque desnecessária e é mais difícil de configurar. Definitivamente, prefiro usar apenas no entanto, openssl.
  • @Andr é em relação ao EJBCA, também pode ser usado na linha de comando, então você ganhou ‘ t tem que expor a interface da web. Mas é ‘ é uma coisa de nível empresarial e provavelmente um exagero para seu propósito es (e digo isso como alguém que ganha a vida trabalhando com isso).

Resposta

Para alguns bom histórico, por favor, veja minha apresentação Como construir e operar seu próprio centro de gerenciamento de certificados de mediocridade . A essência da apresentação é que o mais necessário não é uma lista dos comandos a serem executados, mas sim um conhecimento profundo de todos os vários controles que entram na operação de uma CA comercial, como eles interagem entre si, o impacto exato de remover qualquer um deles, o impacto cumulativo da remoção de vários deles e os controles de atenuação necessários para compensar a segurança reduzida.

É por isso que não há “resposta canônica sobre a configuração de uma CA simples”. você segue todo o caminho ISO, começando com uma parte de assinatura de chave, certificados de raiz duplicados com lacunas e vaulted, vários signatários intermediários, servidores de revogação, etc., etc., ou então tem que inventar algum compromisso com base no custo / benefício e risco exclusivos perfil que a empresa está disposta a aceitar. Qualquer pessoa com habilidade e experiência suficientes para fazer essa avaliação, por definição, não precisa da folha de referências. Eles podem analisar a sintaxe de comando correta com base em um entendimento profundo da função de negócios a ser realizada e das primitivas de segurança usadas para implementar esse requisito.

Na apresentação, há histórias de noivados reais de lojas que seguiram esse caminho e se enganaram terrivelmente. Em alguns casos, minha avaliação relatou que absolutamente nada que eu possa fazer com sua segurança de middleware pode superar as fraquezas inerentes da CA interna. Qualquer pessoa nos Estados Unidos deve perceber que provavelmente compra serviços de pelo menos um dos fornecedores aos quais a apresentação se refere. São bancos, cooperativas de crédito, seguradoras de saúde, varejistas e muito mais.

Visto que para as recomendações serem “corretas”, é necessário que o respondente faça suposições importantes sobre seus perfis de risco aceitáveis e que você faça suposições importantes sobre o grau em que suas ideias e as de suas ideias de risco estão alinhadas e em sincronia, a própria proposta é arriscada à primeira vista. Na maioria desses casos, a avaliação da adequação dos tutoriais fornecidos tem mais a ver com a apresentação do que com o nível efetivo de segurança resultante do cumprimento de seus procedimentos. Se for bem organizado e claramente articulado, isso é MUITO mais importante do que se é eficaz. Escolhemos a folha de cola canônica que parece melhor para nós.

Por essas razões, não acredito que um especialista confiável forneceria “correto e atualizado openssl.cnf files”, mas pode, na melhor das hipóteses, fornecer um processo de avaliação para avaliar os requisitos e o risco aceitável de forma mais completa. Como você está apostando no resultado do negócio, nenhum especialista confiável faria isso fora da proteção de um contrato. Quaisquer recomendações que você receba, quase por definição, têm que ser de um especialista em confiável. Boa sorte.

Comentários

  • Mesmo para uma intranet para recursos internos? Você também pode indicar que a apresentação é sua.
  • ” Mesmo para um intranet para recursos internos? ” Especialmente para a intranet desde que ‘ s onde ocorre a maioria das violações de dados. ” Você também pode querer indicar que a apresentação é sua. ” Achei que sim ao descrever minha experiência fazendo as avaliações, mas entendi. Eu ‘ atualizei.

Resposta

Siga estes instruções para configurar uma CA baseada no Windows . Como você está emitindo certificados de cliente, esteja ciente de que hashes SHA2 não são compatíveis com XP.

A resposta simples é:

  1. Instalar AD
  2. Instale uma CA corporativa no controlador de domínio
  3. Edite o modelo de certificado para emitir certificados de usuário final (defina a permissão para os usuários se inscreverem ou irem para uma página da web)
  4. Implante a chave pública do certificado raiz para todos os servidores que validam usuários
  5. Se os usuários estiverem no AD, use GPO para habilitar o registro automático

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *