programing

자체 서명된 인증서가 있는 윈도우즈에서 git를 사용하여 "로컬 발급자 인증서를 가져올 수 없음"을 확인할 수 없음

muds 2023. 5. 6. 16:46
반응형

자체 서명된 인증서가 있는 윈도우즈에서 git를 사용하여 "로컬 발급자 인증서를 가져올 수 없음"을 확인할 수 없음

Windows에서 Git을 사용하고 있습니다.저는 msysGit 패키지를 설치했습니다.내 테스트 리포지토리에는 서버에 자체 서명된 인증서가 있습니다.저는 HTTP를 사용하여 문제 없이 저장소에 액세스하고 사용할 수 있습니다.HTTPS로 이동하면 다음 오류가 발생합니다.

SSL 인증서 문제: 로컬 발급자 인증서를 가져올 수 없습니다.

Windows 7 클라이언트 컴퓨터의 신뢰할 수 있는 루트 인증 기관에 자체 서명된 인증서를 설치했습니다.오류 메시지 없이 Internet Explorer에서 HTTPS 저장소 URL을 찾을 수 있습니다.

Philip Kelley의 이 블로그 게시물은 cURL이 클라이언트 시스템의 인증서 저장소를 사용하지 않는다고 합니다.블로그 게시물의 조언에 따라 개인 복사본을 만들었습니다.curl-ca-bundle.crtGit가 사용하도록 구성합니다.나는 Git이 내 복사본을 사용하고 있다고 확신합니다.만약 제가 복사본의 이름을 바꾼다면, Git은 파일이 없다고 불평합니다.

블로그 게시물에 언급된 것처럼 인증서를 붙여 넣었는데 "현지 발급자 인증서를 가져올 수 없습니다"라는 메시지가 여전히 표시됩니다.

HTTPS를 통해 GitHub Repository를 복제하여 Git가 여전히 작동하고 있음을 확인했습니다.

블로그 게시물과 다른 점은 인증서가 루트라는 것입니다. 인증서에 연결할 체인이 없습니다.내 인증서는 원래 IIS8 IIS Manager 링크 '자체 서명된 인증서 만들기'를 클릭하여 가져온 것입니다.아마도 그것은 cURL이 기대하는 것과 어떤 식으로든 인증서를 다르게 만들 것입니다.

Git/cURL이 자체 서명된 인증서를 수락하도록 하려면 어떻게 해야 합니까?

문제는 기본적으로 "리눅스" 암호 백엔드를 사용하는 git입니다.

Git for Windows 2.14부터는 내장된 Windows 네트워킹 계층인 Schannel을 암호화 백엔드로 사용하도록 Git를 구성할 수 있습니다., 윈도우즈 인증서 저장 메커니즘을 사용하므로 curl CA 저장 메커니즘을 명시적으로 구성할 필요가 없습니다. https://msdn.microsoft.com/en-us/library/windows/desktop/aa380123(v=vs.85).aspx

그냥 실행:

git config --global http.sslbackend schannel

도움이 될 것입니다.

이제 Windows용 git를 설치할 때 채널을 사용하는 것이 표준 설정입니다. 또한 https가 구성하기 쉽고 방화벽에 의해 차단될 가능성이 낮기 때문에 가능하면 SSH를 통해 리포지토리를 더 이상 체크아웃하지 않는 것이 좋습니다.

SSL 확인을 완전히 비활성화하려면 Git Bash를 열고 명령을 실행합니다.

git config --global http.sslVerify false

참고: 솔루션을 사용하면 중간자 공격과 같은 공격을 받을있습니다.따라서 가능한 한 빨리 확인 기능을 다시 켜십시오.

git config --global http.sslVerify true

저도 이 문제가 있었습니다.저의 경우, 저는 매번 누를 때마다 서버의 작업 복사본을 업데이트하기 위해 수신 후 Githook을 얻으려고 했습니다.연결한 블로그의 지침을 따르려고 했습니다.나에게도 효과가 없었고 사용자별로 설정을 재정의하는 것도 효과가 없는 것 같았습니다.

결국 제가 해야 할 일은 기사에서 언급한 것처럼 Git 전체에 대한 SSL 검증을 비활성화하는 것이었습니다.완벽한 해결책은 아니지만, 제가 더 나은 해결책을 찾을 때까지 효과가 있을 것입니다.

다음 위치에 있는 Git 구성 텍스트 파일(메모장++과 같은 내가 가장 좋아하는 줄 끝 중립 앱 포함)을 편집했습니다.

C:\Program Files(x86)\Git\etc\gitconfig

[http] 블록에서 sslVerify를 비활성화하는 옵션을 추가했습니다.제가 끝났을 때는 이렇게 보였습니다.

[http]
    sslVerify = false
    sslCAinfo = /bin/curl-ca-bundle.crt

그것이 효과가 있었습니다.

참고:

  • 이렇게 하면 SSL 확인이 비활성화되므로 장기적인 솔루션으로는 권장되지 않습니다.

  • 이 저장소별로 사용하지 않도록 설정할 수는 있지만 설정은 현지화합니다.

  • LetsEncrypt.org 의 등장으로, 이제는 자체 서명 인증서 대신 SSL을 설정하는 것이 상당히 간단하고 자동화되었으며 무료로 제공되므로 sslVerify를 해제할 필요가 없습니다.

kiddailey 내가 생각하기에 꽤 가까웠지만, 나는 SSL 검증을 비활성화하지 않고 오히려 로컬 인증서를 제공할 것입니다.

Git 구성 파일

[http]
    sslCAinfo = /bin/curl-ca-bundle.crt

또는 명령줄을 통해:

git config --global http.sslCAinfo /bin/curl-ca-bundle.crt

저도 이 문제에 직면했습니다.그리고 마침내 이 MSDN 블로그의 지침을 받아 해결되었습니다.

갱신하다

실제로 Git\bin 디렉터리에 있는 인증서 파일 curl-ca-bundel.cert를 추가해야 합니다.

스텝

  1. 브라우저에서 Github 페이지를 열고 주소 표시줄에서 잠금 아이콘을 클릭합니다.
  2. 열려 있는 작은 팝업에서 '인증서 보기' 링크로 이동하면 팝업 창이 열립니다.
  3. 인증서 탭으로 이동합니다(내 경우 3번째).루트 인증서인 최상위 노드를 선택합니다.그리고 아래에 있는 인증서 복사 버튼을 누르고 파일을 저장하세요.
  4. 파일 탐색기에서 Git\bin 디렉터리를 탐색하고 텍스트 편집기에서 curl-ca-bundle.crt를 엽니다.
  5. 텍스트 편집기에서도 내보낸 인증서 파일(3단계)을 엽니다.
  6. 내보낸 인증서의 모든 콘텐츠를 curl-ca-bundle.crt 끝에 복사하고 저장합니다.

마지막으로 상태를 확인합니다.편집하기 전에 curl-ca-bundle.crt 파일을 백업하여 안전한 상태로 유지하십시오.

개발 SSL을 위한 makecert 사용에 대한 답변이 이 문제를 해결해 주었습니다.

이유는 알 수 없지만 IIS 관리자의 단순한 '자체 서명 인증서 만들기' 링크로 생성된 인증서는 이러한 작업을 수행하지 않습니다.저는 자체 서명된 CA 루트를 만들고 설치한 다음 이를 사용하여 서버에 대한 서버 인증 인증서를 발급하는 연결된 질문의 접근 방식을 따랐습니다.IIS에 둘 다 설치했습니다.

그것은 원래 질문에 언급된 블로그 게시물과 같은 상황을 만듭니다.루트 인증서가 curl-ca-bundle.crt에 복사/붙여지고 나면 git/curl 콤보가 충족되었습니다.

ssl 확인을 완전히 비활성화하거나 git에서 사용하는 CA 인증서 파일 번들을 중복/해킹하지 않도록 하려면 호스트의 인증서 체인을 파일로 내보내고 git에서 다음과 같이 사용할 수 있습니다.

git config --global http.https://the.host.com/.sslCAInfo c:/users/me/the.host.com.cer

그래도 작동하지 않으면 호스트에 대해서만 SSL 확인을 사용하지 않도록 설정할 수 있습니다.

git config --global http.https://the.host.com/.sslVerify false

참고: SSL 검증이 해제되면 중간에 공격을 받을 수 있는 남성이 발생합니다.

github Repository(또는 자체 서명되지 않은 인증서)의 경우 Git-on-Windows를 설치하는 동안 아래를 선택하면 문제가 해결되었습니다.

여기에 이미지 설명 입력

위의 모든 답변의 요약을 완벽하게 설명합니다.

이유

액세스하려는 리포지토리가 있는 경우 git가 git 서버와 https 핸드셰이크를 완료할 수 없기 때문에 이 문제가 발생합니다.

해결책

github 서버에서 인증서를 가져오는 단계

  1. 브라우저에서 액세스하려는 Github 열기
  2. 주소 표시줄의 잠금 아이콘을 눌러 > '인증서'를 클릭
  3. '인증경로' 탭으로 이동 > 인증서 계층에서 최상위 노드 선택 > '인증서 보기' 클릭
  4. 이제 '상세 정보'를 클릭하고 '파일로 복사'를 클릭합니다.> '다음' 클릭 > '베이스 64 인코딩 X509(.CER)' > 원하는 경로에 저장합니다.

로컬 Git 인증서 저장소에 인증서를 추가하는 단계

  1. 이제 메모장에 저장한 인증서를 열고 --Begin Certificate-- 및 --end Certificate--와 함께 내용을 복사합니다.

  2. Git에 대한 모든 인증서가 저장된 경로를 찾으려면 cmd에서 다음 명령을 실행합니다.

    git config --list

  3. 키 'http.sslcainfo'를 확인하면 해당 값이 경로가 됩니다.

참고: Git의 기본 경로에 대한 http.sslcainfo 키를 찾을 수 없는 경우: C:\Program Files\Git\mingw64\ssl\certs

  1. 이제 해당 경로에 있는 'ca-bundle.crt'를 엽니다.

참고 1: 이 파일 관리자 모드를 엽니다. 그렇지 않으면 업데이트 후 저장할 수 없습니다.(팁 - 메모장++을 이 용도로 사용할 수 있습니다.)

참고 2: 이 파일을 수정하기 전에 다른 곳에 백업을 보관하십시오.

  1. 이제 다른 인증서가 ca-bundle.crt에 배치되는 방법과 같이 1단계에서 언급한 파일의 내용을 4단계의 파일의 끝 파일에 복사합니다.
  2. 이제 새 터미널을 열고 https를 사용하여 git 서버와 관련된 작업을 수행할 수 있습니다.

방금 동일한 문제가 발생했지만 Windows에서 소스 트리 사용 일반 GIT에 대해서도 동일한 단계를 수행했습니다.저는 다음과 같은 단계를 거쳐 이 문제를 해결할 수 있었습니다.

  1. 서버 인증서 트리 가져오기 크롬을 사용하여 수행할 수 있습니다.서버 주소로 이동합니다.자물쇠 아이콘을 클릭하고 인증서를 봅니다.모든 인증서 체인을 PEM(base64 인코딩 파일) 형식으로 내보냅니다.
  2. GIT 신뢰 구성 파일의 신뢰 체인에 인증서를 추가합니다. "git config --list"를 실행합니다.인증서 신뢰 파일이 있는 위치에 표시된 "slcainfo.slcainfo" 구성을 찾습니다."- -BEGIN-" 및 "-END-"를 포함한 모든 인증서를 신뢰 체인 파일에 복사합니다.
  3. 전체 인증서 체인을 인증서 파일에 추가해야 합니다.

이렇게 하면 자체 서명된 인증서와 GIT 사용 문제가 해결될 것입니다.

"http.sslcapath" 구성을 사용하려고 했지만 작동하지 않았습니다.또한 인증서 파일에 체인 전체를 포함하지 않았다면 이 또한 실패했을 것입니다.새로운 설치를 위해 위의 내용을 반복해야 하므로 이에 대한 지침이 있는 사람이 있으면 알려주시기 바랍니다.

이것이 시스템 GIT인 경우 TOOLS -> options GIT 탭의 옵션을 사용하여 시스템 GIT를 사용하면 소스 트리의 문제도 해결할 수 있습니다.

저는 이전에 이 문제가 발생한 적이 있으며, 다음 구성을 사용하여 해결합니다.

[http "https://your.domain"] sslCAInfo=/path/to/your/domain/priviate-certificate

git 2.3.1 이후로, 당신은 그것을 넣을 수 있습니다.https://your.domain. "라는 메시지가 표시됩니다.

2021년 1월 - VS2019년 [오픈] 대신 메뉴 > Git > 설정 > Git 글로벌 설정 > 암호화 네트워크 제공자 > [보안 채널]을 설정하여 이 문제를 해결했습니다.SSL]

Git SSL 인증서 문제가 로컬 발급자 인증서를 가져올 수 없습니다(수정).

PS: --global 또는 --local http.sslVerify를 false로 설정할 필요가 없습니다.저는 자체 서명된 인증서를 사용하지 않는 Azure DevOps 레포를 복제하고 있었습니다.VS2019 또는 Git for Windows의 문제인 것 같습니다.그들은 그것을 고칠 필요가 있습니다!!

제 경우, 윈도우 7용 ConEmu 터미널을 설치했기 때문에, 그것은 다음을 생성합니다.ca-bundle설치중에서 C:\Program Files\Git\mingw64\ssl\certs.

따라서 터미널에서 다음 명령을 실행해야 작동합니다.

$ git config --global http.sslbackend schannel
$ git config --global http.sslcainfo /mingw64/ssl/certs/ca-bundle.crt

그러므로, 나의C:\Program Files\Git\etc\gitconfig에는 다음이 포함됩니다.

[http]
    sslBackend = schannel
    sslCAinfo = /mingw64/ssl/certs/ca-bundle.crt

또한 Git 설치 시 여기에서 언급한 것과 동일한 옵션을 선택했습니다.

도움이 되길 바랍니다!

Windows를 사용할 때 기본적으로 "Linux" 암호화 백엔드를 사용하는 git에 문제가 있습니다.Git for 윈도우즈 2.14부터는 기본 제공 윈도우즈 네트워킹 계층인 Schannel을 암호화 백엔드로 사용하도록 Git를 구성할 수 있습니다.이렇게 하려면 GIT 클라이언트에서 다음 명령을 실행하면 됩니다.

git config --global http.sslbackend schannel

즉, 윈도우즈 인증서 저장소 메커니즘을 사용하므로 curl CA 저장소(http.sslCAInfo) 메커니즘을 명시적으로 구성할 필요가 없습니다.

한 가지 문제는 (Windows PC의) 경로 형식이었습니다.원래는 이것을 가지고 있었습니다.

git config --global http.sslCAInfo C:\certs\cacert.pem

그러나 "로컬 발급자 인증서를 가져올 수 없습니다" 오류로 인해 실패했습니다.

결국 효과가 있었던 것은 다음과 같습니다.

git config --global http.sslCAInfo "C:\\certs\\cacert.pem"

내 문제를 해결했습니다 git config --global http.sslBackend 채널

  1. 다음 링크에서 인증서 다운로드: https://github.com/bagder/ca-bundle
  2. 에 합니다. C:\Program Files\Git\bin그리고.C:\Program Files\Git\mingw64\bin

그런 다음 다음과 같은 방법을 사용합니다.git clone https://github.com/heroku/node-js-getting-started.git

git config --global http.sslVerify false

특정 오류 SSL 인증서 문제를 해결하려면: 로컬 발급자 인증서를 가져올없습니다.

암호화 인증서에 대해서도 같은 문제가 있었습니다.

우리가 필요로 하는 https가 있는 웹 사이트:

SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf

하지만 git pull은 말합니다:

fatal: unable to access 'https://example.com/git/demo.git/': SSL certificate problem: unable to get local issuer certificate

이 문제를 해결하려면 다음 사항도 추가해야 합니다.

SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem

저의 경우, 다른 Git 저장소에 대해 다른 인증서를 사용해야 했습니다.

아래 단계를 따르십시오(저장소 인증서가 있는 경우 5단계부터 읽을 수 있습니다).

  1. 원격 리포지토리의 사이트로 이동합니다.예: github.com , bitbucket.org , tfs.dll...

  2. 왼쪽 위에 있는 잠금 아이콘을 클릭하고 인증서를 클릭합니다.

  3. 인증 경로 탭으로 이동하여 두 번 클릭합니다. 루트 인증서

  4. 세부 정보 탭으로 이동하고 파일복사를 클릭합니다.

  5. 원하는 위치로 인증서를 내보내거나 복사합니다.예: C:\certs\example.cer

  6. 로컬 리포지토리 폴더에서 gitbash를 열고 다음을 입력합니다.

    $ git config http.sslCAInfo "C:\certs\example.cer"

이제 각 리포지토리에 대해 서로 다른 인증서를 사용할 수 있습니다.

억해요, 화를걸로 하세요.--global매개 변수는 또한 다른 폴더에 있는 git 저장소의 인증서를 변경하므로 사용하면 안 됩니다.--global매개 변수입니다.

git config --global http.sslbackend secure-transport

(Big Sirr로 업데이트한 후 이 작업을 수행해야 함)

이것은 나에게 효과가 있습니다.cmd 라인을 열고 다음 명령을 실행하고 다시 풀했습니다.

git config --global http.sslVerify false

저는 Azure DevOps(Visual Studio)에서도 같은 문제를 겪었습니다.SSL 검증을 사용하지 않도록 설정하는 대신 SSH 프로토콜을 선호했기 때문에 SSH 프로토콜을 사용하여 복제하기로 결정했습니다.

SSH 키만 생성하면 됩니다. 생성할 수 있습니다.SSH 문서

ssh-keygen

그런 다음 공개 키를 Youthgit 호스트(예: Azure Devops, Github, Bitbucket, Gitlab 등)에 가져옵니다.

비주얼 스튜디오를 사용할 때 이런 오류가 발생했습니다.이 문제는 Visual Studio 옵션 창에서 암호화 네트워크 공급자 설정을 OpenSSL로 설정한 경우에 발생합니다.보안 채널로 설정을 변경했을 때 해결되었습니다.이 설정은 VS를 업그레이드할 때 사용하도록 설정되어 있어야 합니다.

오류

failed
할 수 : 할 수 없습니다.
SSL 인증서 문제: 로컬 발급자 인증서를 가져올 수 없습니다.

이유

로컬 컴퓨터에서 파일을 커밋한 후 로컬 Git 연결 매개 변수가 오래된 경우(예: HTTP에서 HTTPS로 변경) "push fail" 오류가 발생할 수 있습니다.

해결책

  1. 를 엽니다..git로컬 디렉터리의 루트에 있는 폴더
  2. 를 엽니다.config코드 편집기 또는 텍스트 편집기의 파일(VS 코드, 메모장, 텍스트패드)
  3. 파일 내부의 HTTP 링크를 적절한 Gitrepo의 웹 페이지에서 사용할 수 있는 최신 HTTPS 또는 SSH 링크로 바꿉니다(클론 버튼).
    예:
    url = http://git.[host]/[group/project/repo_name]     (actual path)
    
    둘 중 하나로 대체
    url = ssh://git@git.[host]:/[group/project/repo_name] (new path SSH)
    url = https://git.[host]/[group/project/repo_name]    (new path HTTPS)
    

${HOME}/.gitconfig 파일에 아래 항목을 추가하여 문제를 해결했습니다.

[원격 "스캐너"]

프록시=

대부분의 경우 위에서 언급한 항목에서 프록시를 사용하도록 설정하면 이 문제가 해결됩니다.

인증서 문제가 아닌 DNS 문제가 있을 수 있으므로 Git 셸에서 SSL 확인을 사용하지 않도록 설정하기 전에 DNS 문제를 제외해야 합니다.이러한 사례는 https-issue-related-to-dns와 같은 Q&A 포럼에서 언급되었습니다.Windows에서 WSL을 터미널로 사용하는 경우 실행해 볼 수 있습니다.sudo echo nameserver 8.8.8.8 > /etc/resolv.conf그런 다음 git 명령을 실행하여 차이가 있는지 확인합니다.이것은 영구적인 DNS 수정(터미널 세션의 수명만 지속됨)이 아닌 것처럼 보이지만, 인증서 문제가 아니라 DNS 문제인지 확인하는 데 도움이 될 수 있습니다.공용 DNS를 사용하도록 네트워크를 구성하는 방법에 대해서도 문서를 확인할 수 있습니다. 이는 인증서 문제를 해결하기 위해 DNS 설정을 조정해야 하는지 여부를 확인하는 데 도움이 될 뿐입니다.

로컬 인증서를 다운로드하여 설치합니다.아마도 당신의 회사 사이트에 게시되어 있을 것입니다.예를 들어 *.cer 파일입니다.

  1. 마우스 오른쪽 단추를 클릭하고 선택합니다.Install Certificate'인증서 가져오기 마법사'가 나타납니다.선택한다.Local Machine.누르다Next,확인.

  2. 선택한다.Place all certificates in the following store,누르다Browse선택합니다.Trusted Root Certification Authorities,OK,Finish.

여기에 이미지 설명 입력

또한 다른 응용 프로그램이 데이터를 가져오거나 풀거나 푸시할 수 있는지 확인할 수 있습니다.예를 들어,Android Studio아니면 아마IDEA선택해야 합니다.Settings이 확인란:Use credential helper.

프로젝트를 "복제"할 때 이 오류가 발생했습니다.한 가지 해결 방법은 웹 페이지에서 "zip으로 다운로드"를 사용하는 것입니다. 이것은 제가 하고 싶은 것을 달성한 것입니다.

이것은 이 오류를 발견하는 사람들에게 도움이 될 수 있습니다.VPN을 통해 작업 중인 경우 VPN의 연결이 끊기는 경우에도 이 오류가 발생할 수 있습니다.간단한 해결 방법은 VPN을 다시 연결하는 것입니다.

언급URL : https://stackoverflow.com/questions/23885449/unable-to-resolve-unable-to-get-local-issuer-certificate-using-git-on-windows

반응형