Chứng chỉ SSL bị từ chối khi cố truy cập GitHub qua HTTPS đằng sau tường lửa


389

Tôi bị kẹt sau tường lửa nên phải sử dụng HTTPS để truy cập kho GitHub của tôi. Tôi đang sử dụng cygwin 1.7.7 trên Windows XP.

Tôi đã thử cài đặt điều khiển từ xa https://username@github.com/username/ExcelANT.git, nhưng đẩy các lời nhắc nhập mật khẩu, nhưng không làm gì cả khi tôi đã nhập nó. https://username:<password>github.com/username/ExcelANT.gitvà nhân bản repo trống từ đầu nhưng mỗi lần nó lại gây ra lỗi tương tự

lỗi: Sự cố chứng chỉ SSL, xác minh rằng chứng chỉ CA là OK. Chi tiết:
lỗi: 14090086: Các thói quen SSL: SSL3_GET_SERVER_CERTIFICATE: xác minh chứng chỉ không thành công khi truy cập https://github.com/username/ExcelANT.git/info/refs

Bật GIT_CURL_VERBOSE=1cho tôi

*
Sắp kết nối () với cổng github.com 443 (# 0) * Đang thử 207.97.227.239 ... * đặt thành công các vị trí xác minh chứng chỉ:
* CAfile: none
CApath: / usr / ssl / certs
* Chứng chỉ SSL, xác minh rằng chứng chỉ CA là OK. Chi tiết:
lỗi: 14090086: Các thói quen SSL: SSL3_GET_SERVER_CERTIFICATE: xác minh chứng chỉ không thành công
* Đã hết hạn sử dụng
* Đóng kết nối # 0
*
Sắp kết nối () với cổng github.com 443 (# 0) * Đã thử thành công 207.97.227.239 ... xác minh vị trí:
* CAfile: none
CApath: / usr / ssl / certs
* Sự cố chứng chỉ SSL, xác minh rằng chứng chỉ CA là OK. Chi tiết:
lỗi: thói SSL:: 14090086 SSL3_GET_SERVER_CERTIFICATE: Giấy chứng nhận kiểm tra thất bại
* Hết Hạn xóa
* Đóng kết nối # 0
lỗi: vấn đề chứng chỉ SSL, xác minh rằng cert CA là OK . Chi tiết:
lỗi: 14090086: Các thói quen SSL: SSL3_GET_SERVER_CERTIFICATE: xác minh chứng chỉ không thành công trong khi truy cậphttps://github.com/username/ExcelANT.git/info/refs

fatal: HTTP request failed

Đây có phải là một vấn đề với tường lửa của tôi, cygwin hay không?

Tôi đã không đặt proxy HTTP trong cấu hình Git, tuy nhiên đó là máy chủ ISA cần xác thực NTLM, không phải cơ bản, vì vậy trừ khi có ai biết cách buộc git sử dụng NTLM, tôi rất thất vọng.


Nếu tôi đặt http.sslVerify false thì kết nối sẽ an toàn? và nó là con đường tốt để sử dụng? Ở giữa chúng tôi đang sử dụng tường lửa pfsense. ngay bây giờ, tập tin .gitconfig trên hồ sơ người dùng trống.
Nullpulum

Câu trả lời:


57

Hãy bỏ qua câu trả lời này nếu bạn muốn khắc phục vấn đề chứng chỉ. Câu trả lời này liên quan đến việc ssh đường hầm thông qua tường lửa, IMHO là một giải pháp tốt hơn để xử lý các vấn đề về tường lửa / proxy.

Có một cách tốt hơn so với sử dụng truy cập http và đó là sử dụng dịch vụ ssh do github cung cấp trên cổng 443 của máy chủ ssh.github.com.

Chúng tôi sử dụng một công cụ gọi là corkscrew. Điều này có sẵn cho cả CygWin (thông qua thiết lập từ trang chủ của Cygwin) và Linux bằng công cụ đóng gói yêu thích của bạn. Đối với MacOSX, nó có sẵn từ macports và brew ít nhất.

Các dòng lệnh như sau:

$ corkscrew <proxyhost> <proxyport> <targethost> <targetport> <authfile>

Proxyhost và proxyport là tọa độ của proxy https. Targethost và targetport là vị trí của máy chủ lưu trữ đến đường hầm. Authfile là một textfile có 1 dòng chứa tên người dùng / mật khẩu máy chủ proxy của bạn được phân tách bằng dấu hai chấm

ví dụ:

abc:very_secret

Cài đặt để sử dụng giao thức ssh "bình thường" cho giao tiếp git

Bằng cách thêm nó vào ~/.ssh/configthủ thuật này có thể được sử dụng cho các kết nối ssh bình thường.

Host github.com
  HostName ssh.github.com
  Port 443
  User git
  ProxyCommand corkscrew <proxyhost> <proxyport> %h %p ~/.ssh/proxy_auth

bây giờ bạn có thể kiểm tra nó hoạt động bằng cách ssh-ing để gitproxy

pti@pti-laptop:~$ ssh github.com
PTY allocation request failed on channel 0
Hi ptillemans! You've successfully authenticated, but GitHub does not provide shell access.
       Connection to github.com closed.
pti@pti-laptop:~$

. đã tải lên khóa của bạn).

Một biến thể nhỏ của phương pháp này là trường hợp khi bạn cần truy cập vào kho lưu trữ bằng một khóa khác, ví dụ: để tách tài khoản riêng tư của bạn khỏi tài khoản chuyên nghiệp.

# 
# account dedicated for the ACME private github account 
#
Host acme.github.com
  User git
  HostName ssh.github.com
  Port 443
  ProxyCommand corkscrew <proxyhost> <3128> %h %p ~/.ssh/proxy_auth
  IdentityFile ~/.ssh/id_dsa_acme

thưởng thức!

Chúng tôi đã sử dụng điều này trong nhiều năm nay trên cả Linux, Mac và Windows.

Nếu bạn muốn bạn có thể đọc thêm về nó trong bài viết trên blog này


Tôi đã từ bỏ để làm việc này, nhưng có một cái nhìn khác về nó, và làm cho nó hoạt động. thay đổi .ssh / config thành> Host ssh.github.com >User oharab >Hostname ssh.github.com >Port 443 >PreferredAuthentications publickey >IdentityFile ~/.ssh/id_rsa và nhân bản bằng git clone git@ssh.github.com:oharab/log4vba.gitđã giúp nó hoạt động nhanh chóng.
oharab

1
Tôi chỉ bỏ qua vì câu trả lời dưới đây hữu ích hơn nhưng không may stackoverflow luôn đặt câu trả lời được chấp nhận lên hàng đầu, ngay cả khi đó chỉ là câu trả lời cho một trường hợp duy nhất.
mjaggard

1
Trong mọi trường hợp, tôi đã cập nhật câu trả lời vì tôi thấy rằng SSL đường hầm thông qua proxy https vẫn là một giải pháp tốt hơn so với việc sử dụng chứng chỉ HTTPS hoặc vô hiệu hóa chúng và kết thúc bằng một giải pháp vẫn kém hiệu quả, thân thiện với người dùng và kém an toàn hơn. Vâng, rất nhiều upvote chứng minh tôi sai nhưng tôi vẫn giữ quan điểm của tôi trong vấn đề này.
Peter Tillemans

523

Vấn đề là bạn không có bất kỳ chứng chỉ nào của Tổ chức chứng nhận được cài đặt trên hệ thống của bạn. Và những certs này không thể được cài đặt với setup.exe của cygwin.

Cập nhật: Cài đặt gói Net / ca- cert trong cygwin (cảm ơn dirkjot)

Có hai giải pháp:

  1. Thực tế cài đặt chứng chỉ gốc. Curl guys trích xuất cho bạn chứng chỉ từ Mozilla .

    cacert.pemtập tin là những gì bạn đang tìm kiếm. Tệp này chứa> 250 CA certs (không biết cách tin tưởng số ppl này). Bạn cần tải xuống tệp này, chia nó thành các chứng chỉ riêng lẻ đặt chúng vào / usr / ssl / certs (CApath của bạn) và lập chỉ mục cho chúng.

    Đây là cách làm. Với cygwin setup.exe cài đặt curl và gói openssl thực thi:

    $ cd /usr/ssl/certs
    $ curl http://curl.haxx.se/ca/cacert.pem |
      awk '{print > "cert" (1+n) ".pem"} /-----END CERTIFICATE-----/ {n++}'
    $ c_rehash

    Quan trọng : Để sử dụng, c_rehashbạn phải cài đặt openssl-perlquá.

  2. Bỏ qua xác minh chứng chỉ SSL.

    CẢNH BÁO: Vô hiệu hóa xác minh chứng chỉ SSL có ý nghĩa bảo mật. Nếu không xác minh tính xác thực của các kết nối SSL / HTTPS, kẻ tấn công độc hại có thể mạo danh điểm cuối đáng tin cậy (như GitHub hoặc một số máy chủ Git từ xa khác) và bạn sẽ dễ bị tấn công Man-in-the-Middle . Hãy chắc chắn rằng bạn hiểu đầy đủ các vấn đề bảo mật mô hình mối đe dọa của bạn trước khi sử dụng điều này như một giải pháp.

    $ env GIT_SSL_NO_VERIFY=true git clone https://github...
    

9
Bạn không cần cài đặt curl, chỉ cần sử dụng wget:wget -O - http://curl.haxx.se/ca/cacert.pem | awk 'split_after==1{n++;split_a fter=0} /-----END CERTIFICATE-----/ {split_after=1} {print > "cert" n ".pem"}'
Deebster

38
Tôi biết đây là cygwin, nhưng trong trường hợp bất kỳ ai đến đây bằng Centos, thì đó là / etc / pki / tls / certs nơi .pem sẽ đi.
Ngừng nói xấu Monica Cellio

2
Không làm việc cho tôi - tuy nhiên, tôi không có c_rehash trên đường. Tôi đã thử khởi động lại vỏ của tôi. Tôi cũng đã phải mkdir -p / usr / ssl / certs. Tôi đang tự hỏi nếu cài đặt Cygwin của tôi là khác nhau hoặc thiếu một cái gì đó? Ngoài ra, đặt GIT_SSL_NO_VERIFY = true theo sau bằng cách chạy hoạt động nhân bản dẫn đến lỗi này: fatal: https://code.google.com/.../info/refs not found: did you run git update-server-info on the server?Có thể nó sẽ hoạt động sau khi khởi động lại?
Jeff Axelrod

7
Câu trả lời này là sai. Chỉ cần cài đặt ca-certificatesgói cygwin để lấy chứng chỉ gốc bị thiếu. Tại sao câu trả lời này nhận được rất nhiều up?
rurban

32
Đừng tắt xác minh chứng chỉ SSL. Điều này xảy ra tất cả quá thường xuyên trong các công cụ và mã ứng dụng trong toàn ngành. Nó mở ra cho bạn một người đàn ông trong cuộc tấn công giữa. Nếu bạn sẽ sử dụng SSL thì hãy sử dụng nó đúng cách.
Tim

430

Lưu ý: vô hiệu hóa xác minh SSL có ý nghĩa bảo mật . Nó cho phép Man in the Middle tấn công khi bạn sử dụng Git để truyền dữ liệu qua mạng. Hãy chắc chắn rằng bạn hiểu đầy đủ ý nghĩa bảo mật trước khi sử dụng điều này như một giải pháp. Hoặc tốt hơn nữa, cài đặt chứng chỉ gốc.

Một cách là vô hiệu hóa xác minh SSL CERT:

git config --global http.sslVerify false

Điều này sẽ ngăn không cho CURL xác thực chứng nhận HTTPS.

Chỉ dành cho một kho lưu trữ:

git config http.sslVerify false

17
Nếu bạn không muốn chỉnh sửa cài đặt toàn cầu của mình (ví dụ: tất cả các repos), hãy loại trừ --global
Erin

57
bạn có thể vui lòng thêm một lưu ý về mức độ cực kỳ nguy hiểm này không?
Biên niên sử

26
đây là một ý tưởng khủng khiếp có một lý do mà các chứng chỉ cần được xác minh. nếu bạn không xác minh chứng chỉ là đáng tin cậy thì chứng chỉ có thể được tạo bởi bất kỳ ai và bạn có thể dễ bị một người đàn ông tấn công ở giữa.
Mark Carey

24
Đừng tắt xác minh SSL!
Tim

14
Đối với tất cả mọi người "không làm điều đó": Chắc chắn đây không phải là cách tiếp cận an toàn nhất. NHƯNG, đó là lựa chọn tốt hơn nhiều mà không có SSL nào cả! Bởi vì một số người chỉ chạy các máy chủ git đơn giản riêng tư của họ tại đó là tốt cho họ. Chắc chắn, đối với bất kỳ bảo mật thực sự, đó là cài đặt KHÔNG CÓ. Điều không an toàn nhất là gửi các byte đơn giản thông qua mạng.
Peter Stegnar

109

Tôi muốn Git sử dụng gói chứng chỉ được cập nhật mà không thay thế toàn bộ hệ thống mà tôi sử dụng. Đây là cách để Git sử dụng một tệp cụ thể trong thư mục chính của tôi:

mkdir ~/certs
curl http://curl.haxx.se/ca/cacert.pem -o ~/certs/cacert.pem

Bây giờ cập nhật .gitconfigđể sử dụng điều này để xác minh ngang hàng:

[http]
sslCAinfo = /home/radium/certs/cacert.pem

Lưu ý tôi đang sử dụng một đường dẫn tuyệt đối. Git không mở rộng đường dẫn ở đây, vì vậy bạn không thể sử dụng ~mà không có bùn xấu xí. Ngoài ra, bạn có thể bỏ qua tệp cấu hình và đặt đường dẫn qua biến môi trường GIT_SSL_CAINFOthay thế.

Để khắc phục sự cố này, đặt GIT_CURL_VERBOSE=1. Đường dẫn của tệp CA Git đang sử dụng sẽ được hiển thị trên các dòng bắt đầu bằng "CAfile:" trong đầu ra.


12
Đối với tôi, đây là câu trả lời tốt nhất: nó hoạt động trên unix (thực sự là NetBSD), nó chỉ ảnh hưởng đến git chứ không phải bất cứ thứ gì khác trên hệ thống và nó không yêu cầu quyền truy cập root / Administrator. Cảm ơn!
Eric

1
Hoàn hảo, người ta thậm chí có thể làm tốt hơn. Tôi đã thay thế bản cũ /etc/ssl/certs/ca-certificates.crttrên Ubuntu 8.04 LTS của mình bằng tệp này và nó đã hoạt động một cách kỳ diệu!
Michael-O

1
@Eric cảm ơn vì đã đề cập đến NetBSD vì nó có nghĩa là tôi đã tìm thấy câu trả lời này. NetBSD là một chút kỳ lạ. Tôi đã cài đặt gói OpenSSL, nhưng ngay cả điều đó không giúp bạn có được certs, chỉ là một thư mục giữ chỗ.
nguyên tử

Hơn 200 tuyệt vời hơn, nó cũng hoạt động trên hộp Ubuntu của tôi. Không cần phải vô hiệu hóa kiểm tra chứng chỉ trong git, chỉ cần thực hiện sửa chữa nhanh chóng này.
Colin D Bennett

11
Câu trả lời tuyệt vời, bạn có thể bỏ qua việc chỉnh sửa bằng tay tệp ~ / .gitconfig bằng lệnh sau:git config --global http.sslCAinfo "$HOME/certs/cacert.pem"
Aron Ahmadia

41

Lưu ý rằng để tôi làm việc này (cài đặt RVM trên CentOS 5.6), tôi đã phải chạy như sau:

export GIT_SSL_NO_VERIFY=true

và sau đó, quy trình cài đặt tiêu chuẩn để cuộn trình cài đặt RVM vào bash đã có hiệu quả :)


13
hiệu ứng tương tự như git config --global http.sslverify false
Dyno Fu

20
Đây là TUYỆT VỜI NGUY HIỂM! Toàn bộ quan điểm xác minh chứng chỉ SSL là bảo vệ mã của bạn khỏi bị giả mạo khi bạn truyền mã qua HTTPS! Vô hiệu hóa nó có nghĩa là những người độc hại có thể chèn các lỗ hổng và những thứ khó chịu khác vào mã của bạn khi bạn đẩy và lấy nó!

Nếu tôi đặt http.sslVerify false thì kết nối sẽ an toàn? và nó là con đường tốt để sử dụng? Giữa chúng tôi đang sử dụng tường lửa pfsense
Nullpointer

@Ravi kết nối sẽ hoạt động về mặt kỹ thuật , vâng, nhưng chắc chắn đó không phải là một ý tưởng tốt. Nếu cả nguồn gốc git của bạn và máy cục bộ đều nằm trong nội bộ và dưới sự kiểm soát của tổ chức của bạn, điều đó có thể được thông qua , nhưng theo nhận xét của người dùng456814, việc vô hiệu hóa xác minh sẽ mở ra cho bạn các cuộc tấn công MITM.
Doktor J

40

Một giải pháp rất đơn giản: thay thế https: // bằng git: //

Sử dụng git: //the.reposeective thay vì https: //the.reposeective và sẽ hoạt động.

Tôi đã gặp vấn đề này trên Windows với TortoiseGit và điều này đã giải quyết nó.


Tôi đoán điều này hoạt động vì nó không xác minh ssl cho git://. Như đã nêu trong câu trả lời trên , việc vô hiệu hóa xác minh ssl là một rủi ro bảo mật.
danijar

5
@danijar lý do tại sao điều này hoạt động là vì nó thậm chí không sử dụng SSL . Các git://giao thức sử dụng SSH, mà sử dụng SSH công cộng và tư nhân cặp khóa để xác thực và mã hóa, thay vì một chứng chỉ SSL.

11
@Cupcake git://nào không sử dụng SSH. Xem Giao thức SSHGiao thức Git .
nyuszika7h

@ nyuszika7h, bạn nói đúng. Tôi tiếp tục bị git://nhầm lẫn với git@github.com:user/project.git, đó là cú pháp SCP-ish .

31

Như câu trả lời phổ biến nhất (của Alexey Vishentsev) có nó:

Vấn đề là bạn không có bất kỳ chứng chỉ nào của Tổ chức chứng nhận được cài đặt trên hệ thống của bạn. Và những certs này không thể được cài đặt với setup.exe của cygwin.

Tuy nhiên, khẳng định cuối cùng đó là sai (bây giờ, hoặc luôn luôn là như vậy, tôi không biết).

Tất cả những gì bạn phải làm là vào phần cài đặt cygwin và bao gồm gói 'ca-chứng chỉ' (nó nằm trong Net). Điều này đã lừa tôi.


1
lỗi gg cygwin hiển thị CAfile: /etc/ssl/ca-bundle.crttrong khi cài đặt gói chứng chỉ cagwin /usr/ssl/certs/ca-bundle.crt. Do đó, đã phải chỉnh sửa ~/.gitconfigđể chỉ định vị trí: [http]sau đósslCAinfo = /usr/ssl/certs/ca-bundle.crt
maxpolk

@maxpolk: Tôi đã có một liên kết nhưng hiệu quả là như nhau. Đây rõ ràng là một lỗi trong cygwin git, bạn đã xem xét việc tăng vé chưa? sudo ln -s /usr/ssl/certs/ca-bundle.crt /etc/ssl/
dirkjot

Kể từ hôm nay 2013-5-23, cygwin git hoạt động tốt trên https: nếu bạn cũng có / nhớ cài đặt cygwin ca-certificates.
bobbogo

Tôi đã đến đây từ câu hỏi này , trong đó chỉ ra rằng một câu trả lời có thể được tìm thấy ở đây. Tuy nhiên, cả câu trả lời liên kết lẫn câu trả lời này đều không phù hợp với tôi; TortoiseSVN tiếp tục xuất raerror: SSL certificate problem, verify that the CA cert is OK.
HOẶC Mapper

Chính xác thì chúng ta cài đặt các tệp cài đặt cygwin từ trình quản lý gói ở đâu? Các chứng chỉ ca cần phải nằm trong thư mục bin của Git?
221b

16

Tôi biết danh sách câu hỏi ban đầu Cygwin, nhưng đây là giải pháp cho CentOS:

curl http://curl.haxx.se/ca/cacert.pem -o /etc/pki/tls/certs/ca-bundle.crt

Nguồn: http://eric.lubow.org/2011/security/fixing-centos-root-certert- mượtity -issues /


Nó hiệu quả tuyệt vời đối với tôi; Mặc dù vậy, có lẽ bạn nên tạo bản sao lưu của bản gốc trước, như OP gợi ý. Có vẻ như điều này xảy ra khi Github gia hạn chứng chỉ của họ, nếu bạn đang ở trên một hệ thống có hệ thống cũ hơn.
Evan Donovan

Trên CentOS 5 tôi đã sửa nó bằng cách yum update opensslcập nhật ca-bundle.
raarts

nếu bạn định làm theo tùy chọn này, thì bạn nên xác minh hàm băm SHA-256 của tệp trước khi sử dụng. Bạn có thể lấy sha256sum cho tệp hiện tại bằng một số phương tiện khác ngoài curl bạn đang thiết lập (như trình duyệt trên một máy khác đã được thiết lập an toàn) và sau đó so sánh nó với đầu ra sha256sum /etc/pki/tls/certs/ca-bundle.crtđể chắc chắn rằng bạn đã hiểu đúng tập tin.
kbolino

16

Để sao chép trên windows trong khi đặt SSL xác minh thành false:

    git -c http.sslVerify=false clone http://example.com/e.git

Nếu bạn muốn sao chép mà không cần thiết lập các thiết lập toàn cầu của bạn.


14

Trên CentOS 5.x, một gói đơn giản đã yum update opensslcập nhật gói openssl đã cập nhật ca-bundle.crttệp hệ thống và khắc phục sự cố cho tôi.

Điều tương tự có thể đúng với các bản phân phối khác.


yum Điều này làm việc cho tôi cho một bản cài đặt cũ (4.1.2) của Red Hat linux. Cảm ơn!
Josh

13

Nếu tất cả những gì bạn muốn làm chỉ là sử dụng ứng dụng khách Cygwin git với github.com, có một cách đơn giản hơn nhiều mà không phải trải qua rắc rối tải xuống, giải nén, chuyển đổi, chia tách các tệp chứng chỉ. Tiếp tục như sau (Tôi giả sử Windows XP với Cygwin và Firefox)

  1. Trong Firefox, đi đến trang github (bất kỳ)
  2. nhấp vào biểu tượng github trên thanh địa chỉ để hiển thị chứng chỉ
  3. Nhấp qua "thêm thông tin" -> "chứng chỉ hiển thị" -> "chi tiết" và chọn từng nút trong cấu trúc phân cấp bắt đầu bằng nút trên cùng; đối với mỗi người trong số họ nhấp vào "Xuất" và chọn định dạng PEM:
    • GTECyberTrustGlobalRoot.pem
    • DigiCertHighAssuranceEVRootCA.pem
    • DigiCertHighAssuranceEVCA-1.pem
    • github.com
  4. Lưu các tệp trên ở đâu đó trong ổ đĩa cục bộ của bạn, thay đổi tiện ích mở rộng thành .pem và di chuyển chúng sang / usr / ssl / certs trong bản cài đặt Cygwin của bạn (Windows: c: \ cygwin \ ssl \ certs)
  5. (tùy chọn) Chạy c_reshash từ bash.

Đó là nó.

Tất nhiên điều này chỉ cài đặt một hệ thống phân cấp chứng chỉ, thứ bạn cần cho github. Tất nhiên, bạn có thể sử dụng phương pháp này với bất kỳ trang web nào khác mà không cần phải cài đặt 200 trang web mà bạn không (nhất thiết) tin tưởng.


8

Nếu bạn đang dùng Mac OS X, bạn có thể cài đặt gói ca-cert qua homebrew:

$ brew install curl-ca-bundle
$ git config --system http.sslcainfo /usr/local/share/ca-bundle.crt

Công thức cài đặt gói cert vào chia sẻ của bạn thông qua:

share.install 'ca-bundle.crt'

Các sharephương pháp chỉ là một bí danh để /usr/local/share, và curl-ca-bó được cung cấp bởi Mozilla. Đó là những gì bạn thấy được tham khảo trong rất nhiều vấn đề. Hy vọng điều này sẽ giúp ích vì nó không đơn giản về cách tiếp cận điều này trên Mac OS X. brew install curlsẽ không mang lại cho bạn nhiều thứ như là nó chỉ và sẽ không được liên kết (chạy which curlsẽ luôn xuất ra /usr/bin/curl, đó là mặc định đi kèm với bạn HĐH). Bài đăng này cũng có thể có giá trị .

Tất nhiên bạn sẽ cần phải tắt SSL trước khi cài đặt homebrewvì đó là repo git. Chỉ cần làm những gì curl nói khi nó lỗi trong quá trình xác minh SSL và:

$ echo insecure >> ~/.curlrc

Khi bạn homebrewđã cài đặt cùng với curl-ca-bundle, hãy xóa.curlrc và thử sao chép một repo trên github. Đảm bảo rằng không có lỗi và bạn sẽ ổn.

LƯU Ý: Nếu bạn dùng đến .curlrc, vui lòng xóa nó khỏi hệ thống của bạn ngay khi bạn hoàn thành thử nghiệm. Tập tin này có thể gây ra vấn đề lớn, vì vậy hãy sử dụng nó cho mục đích tạm thời và thận trọng. brew doctorsẽ khiếu nại trong trường hợp bạn quên thanh lọc nó khỏi hệ thống của bạn).

GHI CHÚ: Nếu bạn cập nhật phiên bản git của mình, bạn sẽ cần chạy lại lệnh này vì cài đặt hệ thống của bạn sẽ bị xóa (chúng được lưu trữ liên quan đến nhị phân git dựa trên phiên bản).

Vì vậy, sau khi chạy:

$ brew update
$ brew upgrade

Nếu bạn nhận được một phiên bản mới của git, thì chỉ cần chạy lại:

$ git config --system http.sslcainfo /usr/local/share/ca-bundle.crt

Và bạn sẽ hoàn tất.

Cuối cùng, nếu bạn có phiên bản mới của git, đang chạy:

$ git config -l --system

sẽ cung cấp cho bạn một lỗi dọc theo dòng

fatal: unable to read config file '/usr/local/Cellar/git/1.8.2.2/etc/gitconfig'

đó là mẹo của bạn mà bạn cần nói với git nơi gói ca của Mozilla.

CẬP NHẬT:

.curlrccó thể hoặc không thể là phương thuốc cho vấn đề của bạn. Trong mọi trường hợp, chỉ cần cài đặt gói phần mềm Mozilla trên máy của bạn cho dù bạn có phải tải xuống thủ công hay không. Đó là điều quan trọng ở đây. Một khi bạn nhận được ca-bó, bạn tốt để đi. Chỉ cần chạy lệnh git config và trỏ git vào gói ca.

CẬP NHẬT

Gần đây tôi đã phải thêm:

export CURL_CA_BUNDLE=/usr/local/share/ca-bundle.crtvào .zshenvtệp chấm của tôi kể từ khi tôi đang sử dụng zsh. các git configtùy chọn làm việc cho hầu hết các trường hợp, nhưng khi đánh github qua SSL ( rvm get stableví dụ), tôi vẫn chạy vào các vấn đề chứng chỉ. @Maverick đã chỉ ra điều này trong bình luận của anh ấy, nhưng chỉ trong trường hợp ai đó bỏ lỡ nó hoặc cho rằng họ không nhất thiết phải xuất biến môi trường này ngoài việc chạygit config --system.... lệnh. Cảm ơn và hy vọng điều này sẽ giúp.

CẬP NHẬT

Dường như curl-ca-bó được vừa xóa khỏi homebrew . Có một đề nghị ở đây .

Bạn sẽ muốn thả một số tệp vào:

$(brew --prefix)/etc/openssl/certs


1
Bạn cũng có thể thử các cách sau: export CURL_CA_BUNDLE=/usr/local/share/ca-bundle.crt
Maverick

Xin chào, tôi đang gặp vấn đề tương tự ( stackoverflow.com/questions/20939105/ cấp ) và vấn đề tương tự xuất hiện khi tôi cố gắng cài đặt home-brew. Tôi có thể làm gì trong trường hợp này? Nhập "git config --system http.sslcainfo /usr/local/share/ca-bundle.crt" trong bảng điều khiển của tôi trả về "lỗi: không thể khóa tệp cấu hình /Appluggest/Xcode.app/Contents/Developer/usr/etc/ gitconfig: Không có tập tin hoặc thư mục như vậy ". Cảm ơn sự giúp đỡ của bạn!
Mathieu

@Mathieu thật lạ. Có vẻ như hệ thống của bạn đang trỏ đến một phiên bản git liên quan đến XCode. Đầu ra của việc chạy 'which git' từ thiết bị đầu cuối của bạn là gì?
A-Dubb

6

Bạn có thể thử lệnh này trong Terminal :

git config --global http.sslVerify sai


5

Tôi đã khắc phục sự cố này bằng cách sử dụng apt-cyg (trình cài đặt tuyệt vời tương tự apt-get) để dễ dàng tải xuống chứng chỉ ca (bao gồm Git và nhiều hơn nữa):

apt-cyg install ca-certificates

Lưu ý : apt-cyg nên được cài đặt đầu tiên. Bạn có thể làm điều này từ dòng lệnh Windows:

cd c:\cygwin
setup.exe -q -P wget,tar,qawk,bzip2,subversion,vim

Đóng cmd Windows và mở Cygwin Bash:

wget rawgit.com/transcode-open/apt-cyg/master/apt-cyg
install apt-cyg /bin

Điều này không làm việc cho tôi - tôi vẫn nhận được cùng một lỗi.
Holdenlee

4

trên một piasbery pi tôi đã có

pi @ raspbmc: ~ $ git clone http: //github.com/andreafabrizi/Dropbox-Uploader .git Nhân bản vào 'Dropbox-Uploader' ... lỗi: Sự cố với chứng chỉ SSL CA (quyền truy cập? quyền truy cập?) trong khi truy cập http: // github.com/andreafabrizi/Dropbox-Uploader.git/info/refs fatal: Yêu cầu HTTP không thành công

vậy id

sudo apt-get install ca-certificates

sau đó

git clone http://github.com/andreafabrizi/Dropbox-Uploader.git  

đã làm việc


4

Nếu bạn đã sử dụng HĐH dựa trên debian, bạn chỉ cần chạy

apt-get cài đặt ca-chứng chỉ


4

Tôi đã gặp vấn đề tương tự với Solaris Express 11. Tôi đã mất một thời gian nhưng tôi đã tìm được nơi cần chứng chỉ. Theo /etc/openssl/openssl.cnf, đường dẫn cho chứng chỉ là / etc / openssl / certs. Tôi đã đặt các chứng chỉ được tạo bằng lời khuyên ở trên từ Alexey.

Bạn có thể xác minh rằng mọi thứ đang hoạt động bằng cách sử dụng openssl trên dòng lệnh:

openssl s_client -connect github.com:443

3

Hãy thử sử dụng tệp .netrc, nó sẽ xác thực qua https. Tạo một cuộc gọi tệp .netrctrong thư mục nhà của bạn và đặt nó trong đó:

machine github.com login myusername password mypass

Xem bài đăng này để biết thêm:

https://plus.google.com/u/0/104462765626035447305/posts/WbwD4zcm2fj


Đây là vấn đề xác thực chứng chỉ, không phải là vấn đề xác thực - một số hệ điều hành (bao gồm cả OP chạy) không có chứng chỉ mới của CA cấp github trong danh sách chứng khoán.
Charles Duffy

3

Cải thiện giải pháp của RouMao bằng cách tạm thời vô hiệu hóa xác minh ssl GIT / curl trong Windows cmd:

set GIT_SSL_NO_VERIFY=true
git config --global http.proxy http://<your-proxy>:443

Điểm hay của giải pháp này là nó chỉ có hiệu lực trong cửa sổ cmd hiện tại.


3
Đây là TUYỆT VỜI NGUY HIỂM! Toàn bộ quan điểm xác minh chứng chỉ SSL là bảo vệ mã của bạn khỏi bị giả mạo khi bạn truyền mã qua HTTPS! Vô hiệu hóa nó có nghĩa là những người độc hại có thể chèn các lỗ hổng và những thứ khó chịu khác vào mã của bạn khi bạn đẩy và lấy nó!

3

Bạn đã kiểm tra thời gian của bạn?

Tôi hoàn toàn từ chối làm cho hoạt động git của mình không an toàn và sau khi thử mọi thứ mà mọi người đề cập ở đây, tôi nhận ra rằng một nguyên nhân có thể khiến chứng chỉ không vượt qua được xác minh là ngày hết hạn (hoặc ngày hết hạn của chứng chỉ hoặc địa phương đồng hồ ).

Bạn có thể kiểm tra điều này một cách dễ dàng bằng cách gõ datevào một thiết bị đầu cuối. Trong trường hợp của tôi (một quả mâm xôi Pi mới), đồng hồ địa phương được đặt thành năm 1970, do đó, ntpdate -u 0.ubuntu.pool.ntp.orgmọi thứ đều đơn giản cố định mọi thứ. Đối với rPi, tôi cũng khuyên bạn nên đặt tập lệnh sau vào công việc định kỳ hàng ngày (giả sử /etc/cron.daily/ntpdate):

#!/bin/sh
/usr/sbin/ntpdate -u 0.ubuntu.pool.ntp.org 1> /dev/null 2>&1

3

Tạo mã thông báo truy cập từ Github và lưu nó, vì nó sẽ không xuất hiện lại.

git -c http.sslVerify=false clone https://<username>:<token>@github.com/repo.git

hoặc là,

git config --global http.sslVerify false
git clone https://github.com/repo.git

2

Tôi gặp phải vấn đề tương tự để định cấu hình Git trên nền tảng phát triển hợp tác mà tôi phải quản lý.

Để giải quyết nó:

  • Tôi đã cập nhật bản phát hành Curl được cài đặt trên máy chủ. Tải xuống phiên bản cuối cùng trên trang web Tải xuống trang curl và làm theo quy trình cài đặt Quy trình cài đặt của curl

  • Lấy lại chứng chỉ của cơ quan có thẩm quyền cung cấp chứng chỉ cho máy chủ.

  • Thêm chứng chỉ này vào tệp CAcert được sử dụng bởi curl. Trên máy chủ của tôi, nó được đặt tại /etc/pki/tls/certs/ca-bundle.crt.

  • Định cấu hình git để sử dụng tệp chứng chỉ này bằng cách chỉnh sửa tệp .gitconfig và đặt đường dẫn sslcainfo. sslcainfo= /etc/pki/tls/certs/ca-bundle.crt

  • Trên máy khách, bạn phải lấy chứng chỉ và định cấu hình tệp .gitconfig.

Tôi hy vọng điều này sẽ giúp một số bạn.


1

Tôi đã thử tất cả mọi thứ, cuối cùng tôi đã tìm trong tệp máy chủ và có một mục ngẫu nhiên ở đó cho github. Xóa bí danh đã khắc phục sự cố

% systemroot% \ system32 \ driver \ etc \ hosts


1

Tôi chỉ đơn giản là vô hiệu hóa xác thực chứng chỉ SSL và sử dụng đăng nhập mật khẩu tên người dùng đơn giản như dưới đâynhập mô tả hình ảnh ở đây


0

Tôi cần các chứng chỉ chỉ dành cho Cygwin và git vì vậy tôi đã làm những gì @esquifit đã đăng. Tuy nhiên, tôi đã phải chạy bước 5 theo cách thủ công, c_rehash không có sẵn trên hệ thống của tôi. Tôi đã làm theo hướng dẫn này: Thay vào đó, cài đặt Chứng chỉ CA vào khung OpenSSL .


0

Tôi cần hai điều:

  1. đi đến thiết lập cygwin và bao gồm gói ' ca-chứng chỉ ' (nó nằm trong Net) (như được chỉ ra ở nơi khác).

  2. Nói cho git biết nơi tìm chứng chỉ đã cài đặt:

    GIT_SSL_CAINFO = / usr / ssl / certs / ca-bundle.crt GIT_CURL_VERBOSE = 1 git ...

    (Không cần tùy chọn dài dòng)

    Hoặc lưu trữ tùy chọn vĩnh viễn:

    git config - http: http.sslCAinfo /usr/ssl/certs/ca-bundle.crt

    git ...


-2

Tôi gặp vấn đề tương tự. Nhập chứng chỉ hoặc lệnh để hủy xác minh ssl không hoạt động. Hóa ra là mật khẩu đã hết hạn cho proxy mạng. Có mục cấu hình proxy. trong tệp .gitconfig có trong hồ sơ người dùng windows của tôi. Tôi chỉ cần loại bỏ toàn bộ mục và nó bắt đầu hoạt động trở lại.


-2

Trên hệ thống Mac OSX 10.5, tôi có thể làm cho nó hoạt động với một phương thức đơn giản. Đầu tiên, chạy các thủ tục github và thử nghiệm, nó hoạt động tốt với tôi, cho thấy chứng chỉ của tôi thực sự ổn. https://help.github.com/articles/generating-ssh-keys

ssh -T git@github.com

Sau đó tôi cuối cùng đã nhận thấy một định dạng url khác cho điều khiển từ xa. Tôi đã thử những người khác, ở trên và họ đã không làm việc. http://git-scm.com/book/ch2-5.html

git@github.com:MyGithubUsername/MyRepoName.git

Một "git đẩy myRemoteName" đơn giản đã làm việc tuyệt vời!


-2

Gần đây (tháng 7 năm 2014) tôi đã gặp một vấn đề tương tự và phát hiện trên OS X (10.9.4) rằng đã có chứng chỉ "DigiCert High Assurance EV Root CA" đã hết hạn (mặc dù tôi cũng có một bản chưa hết hạn).

  1. Mở truy cập Keychain
  2. Chứng chỉ tìm kiếm cho "DigiCert"
  3. Xem menu> Hiển thị chứng chỉ đã hết hạn

Tôi đã tìm thấy hai chứng chỉ có tên "DigiCert High Assurance EV Root CA", một hết hạn vào tháng 11 năm 2031 và một chứng chỉ hết hạn vào tháng 7 năm 2014 (một vài ngày trước đó). Xóa chứng chỉ hết hạn đã giải quyết vấn đề cho tôi.

Hi vọng điêu nay co ich.


-2

Đối với những người sử dụng Msys / MinGW GIT, hãy thêm cái này

  export GIT_SSL_CAINFO=/mingw32/ssl/certs/ca-bundle.crt 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.