2014-11-17 40 views
12

Mamy dostęp do naszego serwera Git z certyfikatami klienta, dodając następujące linie do ~/.gitconfigOS X: Git z certyfikatami klienta odrzucone

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

to działa prawidłowo na Linux, Windows i OS X < = 10,8 z dokładnie te same pliki. Gdy próbuję go na OS X 10.10, ja otrzymuję następujący błąd:

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 

Problemem bywa z git version 1.9.3 (Apple Git-50) jak również z git version 2.0.1.

Aktualizacja Po usunięciu odpowiednią pozycję z pęku kluczy, Dostaję następujący katastrofę:

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 

Po tej katastrofie, wpis certyfikat powtarzały w pęku kluczy. Dziwne jest to, że na OS X 10.8 nic nie zostanie dodane do mojego pęku kluczy podczas pobierania z repozytorium.

Aktualizacja 2 Gdy próbuję samo na OS X 10.9, otrzymuję następujący błąd:

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

Update 3 mogę z powodzeniem połączyć z openssl użyciu tych certyfikatów, nawet na 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 

problem wygląda podobnie do this one for GitHub, ale używamy autopodpisywany certyfikaty.

+0

25299 oznacza "Określony element już istnieje w pęku kluczy". Może skopiowałeś klucz publiczny dwa razy do plików CRT? – Phillip

+0

Dzięki za podpowiedź. Usunąłem przedmiot z KeyChain. –

+0

@ThomasS. Cóż, czy to rozwiązało twój problem? – musiKk

Odpowiedz

9

Wygląda na to, że masz taki sam problem, jak w przypadku this docker issue, w którym konkludują, że jest to prawdopodobnie błąd zwijania OSX.

W niektórych modelach sugerują, że może to być spowodowane numerem seryjnym certyfikatu o wartości 1 lub zbyt dużym, aby zmieścić się w 32 bitach.

W przypadku systemu OS X 10.9 myślę, że "Nieprawidłowy certyfikat" powinien zostać rozwiązany przez dodanie certyfikatu do łańcucha kluczy systemu jako zaufanego (omówionego w this question).

This post opisuje pewne zmiany w OS X Curl, które wydają się być powiązane. Rozumiem, że rozwiązaniem może być zmiana na inną curl implementation (ale prawdopodobnie tylko wtedy zadziała, jeśli git zostanie również zainstalowany przy naparach).

+0

Niestety, żadna z informacji znalezionych w linkach nie pomogła rozwiązać problemu. Musiałem przełączyć się z https z certyfikatami klienta na SSH na OS X 10.9+. –

2

Jak Michał już wspomniano jest to OSX curl bug. Możliwym rozwiązaniem byłoby zainstalować wersję git, które nie opierają się na OSX curl realizację

  1. zainstalować MacPorts: https://www.macports.org/install.php
  2. $ portu -v SelfUpdate
  3. $ portu zainstalować git
+0

Niestety, nie jest to opcja, ponieważ nie możemy oczekiwać, że na komputerze użytkownika końcowego zostaną zainstalowane aplikacje. –

+0

nie działa dla mnie 10.11 .. Użyłem home-brew, ale nadal nie działa –