wget: 기본 인증서를 강제로 사용하지 않음

wget: 기본 인증서를 강제로 사용하지 않음

wget을 사용하여 사용자 정의 서버 SSL 인증서를 검증하는 데 문제가 있습니다.

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

이는 실패해야 하지만 그렇지 않습니다. 이유는 wgetfrom 을 포함하여 효과가 예상한 것과 동일하기 때문입니다 /etc/ssl.curl

서로를 인증하는 두 개의 SSL 포인트를 어떻게 가질 수 있습니까?아니요신뢰의 위반?

답변1

대답은 wget이 연결된 SSL 라이브러리에 따라 다릅니다. 버전에 따라 다를 수도 있지만 wget 1.13과 1.15 사이에서는 동작이 변경되지 않았습니다.

wget이 GnuTLS(예: Debian)와 연결된 경우

Wget은 파일이나 디렉터리의 파일에서 인증서를 읽을 수 있습니다. 모든 기본 신뢰할 수 있는 CA(에서 /etc/ssl/certs) 를 끄려면 --ca-certificate및 를 모두 전달합니다 --ca-directory.

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

( /empty오류 메시지를 피하기 위해 생성되었지만 디렉토리가 존재하지 않아도 wget은 계속 실행됩니다.)

wget이 OpenSSL(예: Ubuntu)과 연결된 경우

/usr/lib/ssl/certsWget은 OpenSSL의 기본 위치( Ubuntu에서는 옵션 ./configure에 따라 결정됨 --openssldir) 에서 인증서를 무조건 확인합니다 . 이 외에도 명령줄에 지정된 파일과 디렉터리가 검사됩니다(있는 경우). 기본 위치를 비활성화하는 옵션은 없습니다.

SSL_CTX_set_default_verify_pathswget은 무조건 OpenSSL에서 함수를 호출하므로 기본 위치가 확인됩니다. 당신은 그것을 사용할 수 있습니다LD_PRELOAD통화를 무효화합니다.

$ 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'.

관련 정보