2014-11-17 13 views
12

Chúng tôi truy cập vào máy chủ của chúng tôi với Git chứng chỉ khách hàng bằng cách thêm các dòng sau vào ~/.gitconfigOS X: Git với giấy chứng nhận khách hàng từ chối

[http] 
     sslCAInfo = /path/to/git-ca.crt 
     sslCert = /path/to/git-client.crt 
     sslKey = /path/to/git-client.pem 

này hoạt động tốt trên Linux, Windows và OS X < = 10,8 với chính xác cùng một tệp. Khi tôi thử nó trên OS X 10.10, tôi nhận được lỗi sau:

bash-3.2$ git fetch 
fatal: unable to access 'https://ourserver:12345/repository.git/': SSL: Can't load the certificate "/path/to/git-client.crt" and its private key: OSStatus -25299 

Vấn đề xảy ra với git version 1.9.3 (Apple Git-50) cũng như với git version 2.0.1.

Cập nhật Sau khi loại bỏ các mục tương ứng từ Keychain, tôi nhận được lỗi sau:

bash-3.2$ git fetch 
2014-11-17 09:58:51.257 git-remote-https[2787:12194] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[0]' 
*** First throw call stack: 
(
    0 CoreFoundation      0x00007fff9828164c __exceptionPreprocess + 172 
    1 libobjc.A.dylib      0x00007fff8f91c6de objc_exception_throw + 43 
    2 CoreFoundation      0x00007fff98125068 -[__NSPlaceholderArray initWithObjects:count:] + 360 
    3 CoreFoundation      0x00007fff98124a2d CFArrayCreate + 141 
    4 libcurl.4.dylib      0x00007fff8f75169e darwinssl_connect_common + 2089 
    5 libcurl.4.dylib      0x00007fff8f75073a Curl_ssl_connect_nonblocking + 36 
    6 libcurl.4.dylib      0x00007fff8f719673 Curl_http_connect + 77 
    7 libcurl.4.dylib      0x00007fff8f727977 Curl_protocol_connect + 129 
    8 libcurl.4.dylib      0x00007fff8f739cef multi_runsingle + 799 
    9 libcurl.4.dylib      0x00007fff8f73993d curl_multi_perform + 170 
    10 git-remote-https     0x0000000109815c8a step_active_slots + 25 
    11 git-remote-https     0x0000000109815cfb run_active_slot + 77 
    12 git-remote-https     0x0000000109817621 http_request + 459 
    13 git-remote-https     0x0000000109816148 http_request_reauth + 34 
    14 git-remote-https     0x0000000109813f76 discover_refs + 476 
    15 git-remote-https     0x00000001098131e4 main + 1556 
    16 libdyld.dylib      0x00007fff94bd25c9 start + 1 
    17 ???         0x0000000000000003 0x0 + 3 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 

Sau vụ tai nạn này, sự xâm nhập chứng chỉ đã tái phát trong Keychain. Điều kỳ lạ là, trên OS X 10.8 không có gì sẽ được thêm vào Keychain của tôi trong khi tìm nạp từ kho lưu trữ.

Cập nhật 2 Khi tôi cố gắng cùng trên OS X 10.9, tôi nhận được lỗi sau:

bash-3.2$ git fetch 
fatal: unable to access 'https://ourserver:12345/repository.git/': SSL certificate problem: Invalid certificate chain 

Cập nhật 3 tôi thành công có thể kết nối với openssl bằng những chứng chỉ, thậm chí trên OS X 10.9:

bash-3.2$ openssl s_client -connect ourserver:12345 -cert /path/to/git-client.crt -key /path/to/git-client.pem 
CONNECTED(00000003) 
depth=1 /C=de/O=companyca/CN=internal-ca 
verify error:num=19:self signed certificate in certificate chain 
verify return:0 
--- 
Certificate chain 
0 s:/C=de/O=companyserv/CN=smart 
    i:/C=de/O=companyca/CN=internal-ca 
1 s:/C=de/O=companyca/CN=internal-ca 
    i:/C=de/O=companyca/CN=internal-ca 
--- 
Server certificate 
... 
<----------------------snip----------------------> 
... 
--- 
SSL handshake has read 2348 bytes and written 1360 bytes 
--- 
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA 
Server public key is 2048 bit 
Secure Renegotiation IS supported 
Compression: NONE 
Expansion: NONE 
SSL-Session: 
    Protocol : TLSv1 
    Cipher : DHE-RSA-AES256-SHA 
    Session-ID: E5873AF43D24CEE6529178B4EFD7FE3368711DF1BFBC6CA89C50F8D39DE0B014 
    Session-ID-ctx: 
    Master-Key: <**********> 
    Key-Arg : None 
    Start Time: 1416486728 
    Timeout : 300 (sec) 
    Verify return code: 19 (self signed certificate in certificate chain) 
--- 
closed 

Sự cố tương tự như this one for GitHub, nhưng chúng tôi đang sử dụng tự ký chứng chỉ.

+0

25299 có nghĩa là "Mục được chỉ định đã tồn tại trong chuỗi". Có lẽ bạn đã sao chép một khóa công khai hai lần vào các tệp crt? – Phillip

+0

Cảm ơn gợi ý. Tôi đã xóa mục khỏi KeyChain. –

+0

@ThomasS. Vâng, nó đã giải quyết vấn đề của bạn? – musiKk

Trả lời

9

Có vẻ như bạn đang gặp phải vấn đề tương tự như trong this docker issue nơi họ kết luận đó có thể là lỗi trong OSX curl.

Trong một số other post họ đề nghị, điều này có thể do số sê-ri chứng chỉ là 1 hoặc quá lớn để vừa với 32 bit.

Trên trường hợp OS X 10.9, tôi nghĩ rằng "Chứng chỉ không hợp lệ" cần được giải quyết bằng cách thêm chứng chỉ vào chuỗi khóa hệ thống là đáng tin cậy (được thảo luận trong this question).

This post mô tả một số thay đổi trong OS X curl, dường như có liên quan. Theo hiểu biết của tôi, nó có thể là giải pháp để chuyển sang curl implementation khác nhau (nhưng có khả năng chỉ có thể hoạt động nếu git cũng sẽ được cài đặt bằng cách sử dụng brew).

+0

Thật không may, không có thông tin nào tôi tìm thấy trong các liên kết đã giúp giải quyết vấn đề. Tôi đã phải chuyển từ https với chứng chỉ ứng dụng sang SSH trên OS X 10.9+. –

2

Như Michal đã đề cập đó là lỗi curl OSX. Một giải pháp khả thi sẽ được cài đặt một phiên bản git mà không dựa thi curl OSX

  1. Install macports: https://www.macports.org/install.php
  2. $ cổng -v selfupdate
  3. $ cổng cài đặt git
+0

Thật không may, điều này là không có tùy chọn bởi vì chúng tôi không thể mong đợi macports được cài đặt trên máy của người dùng cuối. –

+0

không hoạt động đối với tôi vào ngày 10.11 .. Tôi đã sử dụng sản xuất bia tại nhà nhưng vẫn không thành công –

Các vấn đề liên quan