
Ferramenta de código aberto para ajudá-lo a construir uma cadeia de certificados SSL válida.
Descrição • Como Usar • Parâmetros • Como funciona • Requisitos • Outros • Licença
É uma ferramenta open source para ajudá-lo a construir uma cadeia de certificados SSL válida. Também pode ajudar a corrigir a cadeia incompleta e baixar todos os certificados CA ausentes. Você também pode baixar todos os certificados de um servidor remoto e acertar sua cadeia de certificados.
É simples:
# Clone este repositório
git clone https://github.com/trimstray/mkchain
# Entre no repositório
cd mkchain
# Instale
./setup.sh install
# Execute a aplicação
mkchain -i /data/certs -o /data/chain.crt
- o link simbólico para
bin/mkchainé colocado em/usr/local/bin- a página de manual é colocada em
/usr/local/man/man8
Fornece as seguintes opções:
Usage:
mkchain <option|long-option>
Examples:
mkchain --in Root.crt --in Intermediate1.crt --in Server.crt --out bundle_chain_certs.crt
mkchain --in /tmp/certs --out bundle_chain_certs.crt --with-root
mkchain -i Server.crt -o bundle_chain_certs.crt
mkchain -i https://incomplete-chain.badssl.com/ --with-root
Options:
--help show this message
--debug displays information on the screen (debug mode)
-i, --in add certificates to merge (file, multiple files, directory with ssl certificates
or remote domain)
-o, --out saves the result (chain) to a file
--with-root add root certificate to certificates chain
-o|--out- sem este parâmetro, omkchainsalva a cadeia de saída no diretóriomkchain/chains/.
Antes de ler, veja o artigo sobre Cadeia de Certificados SSL.
Vamos começar com a cadeia de certificados ssllabs. Eles são fornecidos junto com o mkchain e podem ser encontrados no diretório example/ssllabs.com, que adicionalmente contém o diretório all (contendo todos os certificados necessários para montar a cadeia) e o diretório server_certificate (contendo apenas o certificado do servidor).
A cadeia correta para o domínio ssllabs.com (resultado do comando openssl):
Certificate chain
0 s:/C=US/ST=California/L=Redwood City/O=Qualys, Inc./CN=ssllabs.com
i:/C=US/O=Entrust, Inc./OU=See www.entrust.net/legal-terms/OU=(c) 2012 Entrust, Inc. - for authorized use only/CN=Entrust Certification Authority - L1K
1 s:/C=US/O=Entrust, Inc./OU=See www.entrust.net/legal-terms/OU=(c) 2012 Entrust, Inc. - for authorized use only/CN=Entrust Certification Authority - L1K
i:/C=US/O=Entrust, Inc./OU=See www.entrust.net/legal-terms/OU=(c) 2009 Entrust, Inc. - for authorized use only/CN=Entrust Root Certification Authority - G2
2 s:/C=US/O=Entrust, Inc./OU=See www.entrust.net/legal-terms/OU=(c) 2009 Entrust, Inc. - for authorized use only/CN=Entrust Root Certification Authority - G2
i:/C=US/O=Entrust, Inc./OU=www.entrust.net/CPS is incorporated by reference/OU=(c) 2006 Entrust, Inc./CN=Entrust Root Certification Authority
O código acima apresenta uma cadeia completa composta por:
Certificado de Identidade (Certificado do Servidor)
emitido para ssllabs.com por Entrust Certification Authority - L1K
Certificado Intermediário
emitido para Entrust Certification Authority - L1K por Entrust Root Certification Authority - G2
Certificado Intermediário
emitido para Entrust Root Certification Authority - G2 por Entrust Root Certification Authority
Certificado Raiz (Certificado Autoassinado)
emitido para Entrust Root Certification Authority por Entrust Root Certification Authority
Neste cenário, vamos encadear todos os certificados fornecidos. Exemplo de execução da ferramenta:
Neste cenário, usamos apenas o certificado do servidor e o utilizamos para recuperar os certificados restantes necessários. Depois, como acima, combinaremos todos os certificados fornecidos. Exemplo de execução da ferramenta:
Para criar uma cadeia válida, você deve fornecer à ferramenta todos os certificados necessários (se você definir o diretório para o parâmetro -i|--in). Serão:
Isso é muito importante porque sem eles você não conseguirá determinar o início e o fim da cadeia.
Se você definir apenas um arquivo de certificado como valor de
-i|--in, omkchainbaixará automaticamente todos os certificados necessários.
No entanto, se você olhar dentro da cadeia gerada após a geração com mkchain, não encontrará o certificado raiz lá.
Por quê? Porque certificados raiz autoassinados não precisam/devem ser incluídos na configuração do servidor web. Eles não têm utilidade (os clientes sempre os ignorarão) e causam uma pequena penalidade de desempenho (latência) porque aumentam o tamanho do handshake SSL.
Se você quiser adicionar um certificado raiz à cadeia de certificados, chame o utilitário com o parâmetro --with-root.
O mkchain permite o uso de dois caminhos de certificação:
Ao gerar a cadeia de certificados, o mkchain exibe comentários com informações sobre os certificados, incluindo quaisquer erros.
Aqui está uma lista de todas as possibilidades:
A mensagem é exibida na ausência de um certificado do servidor que seja o início da cadeia. Este é um caso único porque nesta situação o mkchain encerra sua operação exibindo apenas esta informação. O certificado do servidor é o único certificado necessário para criar corretamente uma cadeia. Sem este certificado, a cadeia correta não será criada.
A situação inversa aqui - mensagem exibida quando um certificado do servidor válido é encontrado.
Esta mensagem aparece quando o primeiro dos dois certificados intermediários não é encontrado. Esta informação não especifica explicitamente a ausência de um segundo certificado intermediário e, por outro lado, permite determinar se existe o certificado intermediário para o qual o certificado do servidor foi assinado. Além disso, pode ser exibido se o segundo certificado intermediário tiver sido fornecido.
Semelhante ao acima, no entanto, diz respeito ao segundo certificado intermediário. No entanto, é possível criar a cadeia corretamente usando o segundo caminho de certificação, por exemplo, usando o primeiro certificado intermediário e substituindo o segundo pelo certificado principal.
Esta mensagem significa que um ou todos os certificados intermediários necessários estão faltando e é exibida na ausência do certificado raiz.
Esta mensagem indica o número de certificados intermediários válidos.
A falta do certificado raiz é tratada como um aviso. Obviamente, ao configurar certificados no lado do servidor, não é recomendado anexar um certificado raiz, mas se você criá-lo com o mkchain, ele trata a cadeia como incompleta, exibindo informações sobre a criação incorreta da cadeia.
Esta mensagem não informa sobre o erro e sobre a falta do campo CN, o que pode acontecer com alguns certificados (veja example/google.com). O campo Common Name identifica o nome do host associado ao certificado. Não há exigência na RFC3280 para que um DN do Emissor tenha um CN. A maioria das CAs inclui um CN no DN do Emissor, mas algumas não, como esta CA Equifax.
O mkchain utiliza utilitários externos que devem ser instalados antes da execução:
Esta ferramenta funciona com:
MacOS/FreeBSD:
pkg install getopt)greadlink do coreutils (instalado via homebrew)Veja isto.
Veja isto.
GPLv3 : http://www.gnu.org/licenses/
Software livre, Yeah!