인증서 고정 테스트에서 sha1 다이제스트를 사용하는 데 문제가 있습니다. sha256을 사용하면 잘 작동하지만 sha1을 사용하면 작동하지 않습니다. 왜?
컬 버전 : ➜ src ./curl -V 컬 7.55.1 (x86_64-apple-darwin16.0.0) libcurl/7.55.1 SecureTransport zlib/1.2.8 출시 날짜: 2017-08-14 프로토콜: dict 파일 ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp 기능: AsynchDNS IPv6 대용량 파일 NTLM NTLM_WB SSL libz UnixSockets테스트 1 사용샤256 ➜ src openssl s_client -connect uol.com.br:443 | openssl x509 -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst sha256 -바이너리 | openssl enc -base64 깊이=2 /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA 오류 확인:번호=19:인증서 체인의 자체 서명된 인증서 반품 확인:0 RSA 키 쓰기 d9W9zyq64Gw8JEA/siAixfvoRRwZVpSgbYJV//0CeKM=
➜ src ./curl --head --verbose --pinnedpubkey "sha256//d9W9zyq64Gw8JEA/siAixfvoRRwZVpSgbYJV//0CeKM="https://uol.com.br * 200.147.67.142를 시도 중... * TCP_NODELAY 설정 * uol.com.br(200.147.67.142) 포트 443(#0)에 연결됨 * 공개 키 해시: sha256//d9W9zyq64Gw8JEA/siAixfvoRRwZVpSgbYJV//0CeKM= * TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256을 사용한 TLS 1.2 연결 * 서버 인증서 : www.uol.com.br * 서버 인증서: RapidSSL SHA256 CA * 서버 인증서: GeoTrust Global CA > 헤드 / HTTP/1.1 > 호스트 : uol.com.br > 사용자 에이전트: 컬/7.55.1 > 수락:/ > < HTTP/1.1 302 발견됨 HTTP/1.1 302 찾음 < 일시 : 2017년 9월 29일(금) 19:32:18 GMT 날짜: 2017년 9월 29일 금요일 19:32:18 GMT < 서버: 아파치 서버: 아파치 < 연결: 닫기 연결: 닫기 < 콘텐츠 유형: 텍스트/html; 문자셋=iso-8859-1 콘텐츠 유형: 텍스트/html; 문자셋=iso-8859-1 < * 연결 0 종료
테스트 2 사용샤1 ➜ src openssl s_client -connect uol.com.br:443 | openssl x509 -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha1 -binary | openssl enc -base64 깊이=2 /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA 오류 확인:번호=19:인증서 체인의 자체 서명된 인증서 반품 확인:0 RSA 키 쓰기 BQr5oEtKUmTzlcelRcWvGvMnQzk=
➜ src ./curl --head --verbose --pinnedpubkey "sha1//BQr5oEtKUmTzlcelRcWvGvMnQzk="https://uol.com.br * 200.221.2.45를 시도 중... * TCP_NODELAY 설정 * uol.com.br(200.221.2.45) 포트 443(#0)에 연결됨 * SSL: 공개 키가 고정된 공개 키와 일치하지 않습니다! * 연결 0 종료 컬: (90) SSL: 공개 키가 고정된 공개 키와 일치하지 않습니다!
답변1
curl
SHA256 해시만 확인하기 때문입니다 . SHA1 해시가 아닙니다.
매뉴얼 페이지에서:
--pinnedpubkey <고정된 공개 키(해시)>
(SSL) Tells curl to use the specified public key file (or hashes) to verify the peer. This can be a path to a file which contains a single public key in PEM or DER format, or any number of base64 encoded sha256 hashes preceded by ´sha256//´ and sepa‐ rated by ´;´