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경우) certsync및 curl포트를이 순서대로 설치할 수 있습니다 .

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.