curl 수정 방법 : (60) SSL 인증서 : sudo를 사용할 때 유효하지 않은 인증서 체인


12

따라서 Mavericks 업그레이드 컬에는 인증서에 더 많은 문제가 있습니다.

자체 서명 된 인증서로 웹 서버에서 파일을 컬링하려고 할 때 "SSL Certificate : Invalid certificate chain"오류가 발생했습니다.

이는 시스템 키 체인에 인증서를 추가하고 여기여기 에서 찾은 SSL을 항상 허용하도록 설정하여 수정되었습니다 .

이것은 잘 작동하며 파일을 말리면 제대로 다운로드됩니다.

그러나 전에 sudo로 curl을 실행하면 (예 : sudo로 실행해야하고 컬을 수행하는 스크립트가 있음) 동일한 오류 메시지로 돌아갑니다.

루트가 아마도 시스템 키 체인에서 읽지 않을 것이라고 생각합니다.

누구든지 이것을 고칠 수있는 방법을 알고 있습니까?

답변:


17

f CA 파일을 파일 시스템 (PEM 형식)에 저장하면 curl을 사용하여 인증서를 사용할 수 있습니다.

sudo curl --cacert /path/to/cacert.pem ...

다음을 사용하여 인증서 확인을 끌 수도 있습니다.

sudo curl --insecure ...

편집 : 피드백과 관련하여 업데이트

이것을 영구적으로 설정하려면 .curlrc파일을 작성하고 홈 디렉토리에 두어야합니다. sudo명령에이 파일이 필요할 수 있습니다 /var/root. 파일은 명령 줄과 동일한 옵션을 사용하지만 대시는 사용하지 않습니다. 한 줄에 하나의 옵션 :

cacert=/path/to/my/certs.pem

답변 주셔서 감사합니다, sudo로 실행중인 스크립트는 타사에서 왔으므로 curl 명령 자체를 실제로 수정할 수는 없습니다. 안전하지 않은 옵션은 실제로는 아닙니다. 이 작업을 전 세계적으로 수행 할 수 있습니까?
Jacob Tomlinson

.curlrc 파일을 만들어 홈 폴더에 저장할 수 있지만 sudo를 사용하면 /var/root/.curlrc 여야합니다. 파일은 한 줄에 하나씩 대시없이 옵션을 포함해야합니다. 따라서 "cacert = / path / to / my / certs.pem"
Dan

1
대신 root-available 을 설정하려면 +1 .curlrc입니다 --insecure. 네트워크 위치에있는 공격자가 그렇게하기 위해서는 MITM에 사소한 것이며 코드를 주입해야합니다.
zigg

이것에 감사드립니다. 내가 찾고있는 것처럼 들립니다. 나는 내일 그것을 시도하고 그것이 작동하면 현상금을 수여합니다.
Jacob Tomlinson

6

루트는 현재 사용자 트러스트 설정에서 읽지 않지만 관리자 트러스트 설정과 루트 사용자 별 트러스트 설정이 있습니다. (이들은 시스템 트러스트 설정 과도 다릅니다 .) 또한 인증서 트러스트 설정은 인증서를 키 체인에 추가하는 것과는 다소 다릅니다. 인증서를 완전히 추가하지 않고 신뢰할 수있는 것으로 표시 할 수 있습니다. (여기의 정확한 상황은 나에게 분명하지 않으며 내가 본 문서는 모호합니다.)

현재 사용자에게 인증서를 신뢰할 수있는 것으로 표시 할 수 있습니다

$ security add-trusted-cert /path/to/cert.pem

그러나 그것은 루트에 도움이되지 않습니다. 지금까지 짐작할 수 있듯이 솔루션 sudo은 위의 방법 중 하나 이므로 루트 사용자에게 특히 신뢰할 수있는 것으로 표시됩니다.

$ sudo security add-trusted-cert /path/to/cert.pem

또는 -d플래그 를 사용하여 관리자 트러스트 설정에 추가 할 수 있습니다.

$ security add-trusted-cert -d /path/to/cert.pem

(OS X는 이것을 확인하기 위해 암호 대화 상자를 팝업합니다.)

후자 중 어느 쪽이든 충분합니다 sudo curl.

참조 : https://developer.apple.com/library/mac/Documentation/Darwin/Reference/ManPages/man1/security.1.html


질문에서 말했듯이 로그인 키 체인뿐만 아니라 시스템 키 체인에도 추가했습니다.
Jacob Tomlinson

실제로 내가 제안한 것을 시도 했습니까? 나는 당신이 묘사 한 상황에서 그것을 테스트했으며 효과가있었습니다. 모든 세부 사항에 대해 잘 모르겠습니다. 문서가 모호합니다.하지만 인증서 신뢰 설정이 단순히 인증서를 키 체인에 추가하는 것과 동의어가 아니며 관리자 인증서 신뢰 설정은 시스템 및 시스템과 별도로 존재한다는 것을 알아야합니다 사용자 설정 / 키 체인. (또한 믹스에 루트 사용자 별 사용자 설정 세트가있는 것 같습니다.)이 시점에서 명확하게 답변을 편집했습니다. 이 솔루션을 사용해보십시오.
Wes Campaigne

예, 처음 게시했을 때이 솔루션을 사용해 보았습니다. 인증서는 시스템 키 체인에 있으며 신뢰할 수있는 것으로 설정되어 있습니다. 아직 운이 없다.
Jacob Tomlinson

5

이것은 실제로 출력 힌트에 있습니다.

echo insecure >> ~/.curlrc

위의 솔루션을 사용하면 모든 curl명령에 사용할 수 있지만 안전하지 않은 호스트와 신뢰할 수없는 호스트에 연결하여 MITM 공격 이 발생할 수 있으므로 권장되지 않습니다 .


2

MacPorts를 사용하는 경우 (및 언급 한 타사 스크립트로 제거 $PATH하거나 호출 하지 않는 /usr/bin/curl경우) certsynccurl포트를이 순서대로 설치할 수 있습니다 .

certsyncMacPorts curl이 자동으로 인증서를 선택하도록 시스템 키 체인을 내보내고 $prefix/etc/openssl/cert.pemsymlink를 설치 하는 도구 및 해당 실행 plist입니다 $prefix/share/curl/curl-ca-bundle.crt -> $prefix/etc/openssl/cert.pem. certsync또한 시스템 키 체인을 변경할 때 생성 된 파일을 자동으로 업데이트합니다.


고마워, 가능하다면 MacPorts를 사용하고 싶지 않습니다.
Jacob Tomlinson


-1

sudo curlOSX Sierra에서 작업 하려면 인증서를 가져 와서 System.keychain신뢰해야했습니다. 이것은 Keychain 앱에서 수동으로 수행하거나 다음 명령을 사용하여 수행 할 수 있습니다.

sudo security add-trusted-cert -d -k /Library/Keychains/System.keychain /path/to/cert.pem

-d시스템 키 체인에 대한 경로를 지정 하고 수동으로 설정 -k하여 인증서를 아직 가져 오지 않은 경우 실제로 가져 오도록하는 것이 중요했습니다.

이 명령은없이 작동 sudo하지만 UI 대화 상자를 통해 비밀번호를 묻습니다. 스크립트의 장애물이 될 수 있습니다.


오류가 발생했습니다SecCertificateCreateFromData: Unknown format in import.
rraallvv

누구든지 공감 한 사람은 내가 "OSX Sierra"에 명확하게 썼다는 것을 알고 있으며 이것은 우리에게 효과적인 해결책이었습니다. 최신 OSX 버전에서 작동하지 않으면 OSX 지원 또는 툴링이 변경 되었기 때문일 수 있습니다. 또는 입력 파일이 지원되는 형식이 아닌 이전 주석 작성자와 같은 문제입니다 (질문에서 지정하지 않음).
Alexander Klimetschek
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.