wget: não forçar nenhum certificado padrão

0

Estou tendo problemas com a verificação de certificados SSL do servidor personalizado e wget.

 wget -O- --ca-certificate=myservercert.pem https://www.google.com

Isso deve falhar, mas não, pois wget de alguma forma também inclui os certificados "padrão confiável" de /etc/ssl . Com curl , o mesmo funciona como esperado.

Como posso ter dois pontos SSL autenticados mutuamente com padrões de confiança no ?

    
por je843 29.04.2015 / 11:42

1 resposta

2

A resposta depende de com qual biblioteca SSL o wget está vinculado. Pode também depender da versão, mas entre o wget 1.13 e o 1.15 o comportamento não mudou.

Se o wget estiver ligado ao GnuTLS (por exemplo, Debian)

O Wget pode ler certificados de um arquivo ou dos arquivos em um diretório. Para desativar todas as CAs confiáveis padrão (em /etc/ssl/certs ), passe ambos --ca-certificate e --ca-directory .

wget -O- --ca-directory=/empty --ca-certificate=myservercert.pem https://www.google.com

(Crie /empty para evitar uma mensagem de erro, mas o wget continua, mesmo que o diretório não exista de qualquer maneira.)

Se o wget estiver vinculado ao OpenSSL (por exemplo, Ubuntu)

O Wget verifica incondicionalmente os certificados no local padrão para o OpenSSL ( /usr/lib/ssl/certs no Ubuntu, determinado em ./configure time pela opção --openssldir ). O arquivo e o diretório especificados na linha de comando, se houver, são verificados além disso. Não há opção para desativar o local padrão.

O local padrão é verificado porque o wget chama a função SSL_CTX_set_default_verify_paths do OpenSSL incondicionalmente. Você pode usar LD_PRELOAD para anular a chamada.

$ cat no_openssl_default_verify_paths.c 
int SSL_CTX_set_default_verify_paths(void *ctx) {
    return 0;
}
$ gcc -Wall -fPIC -shared -o no_openssl_default_verify_paths.so no_openssl_default_verify_paths.c
$ wget -nv -O /dev/null https://www.google.com 
2015-05-04 14:31:02 URL:https://www.google.fr/?gfe_rd=cr&ei=hmZHVa_DD5Tu8wex3IC4BQ [18613] -> "/dev/null" [1]
$ LD_PRELOAD=~/no_openssl_default_verify_paths.so wget -nv -O /dev/null https://www.google.com
ERROR: cannot verify www.google.com's certificate, issued by ‘/C=US/O=Google Inc/CN=Google Internet Authority G2’:
  Unable to locally verify the issuer's authority.
To connect to www.google.com insecurely, use '--no-check-certificate'.
    
por 03.05.2015 / 00:32

Tags