2014-11-17 9 views
12

Wir greifen auf unseren Git-Server mit Client-Zertifikaten durch die folgenden Zeilen hinzufügen zu ~/.gitconfigOS X: Git mit Client-Zertifikaten abgelehnt

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

Dies funktioniert unter Linux, Windows und OS X < = 10.8 mit genau die gleichen Dateien. Wenn ich es auf OS X 10.10 versuchen, erhalte ich folgende Fehlermeldung:

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 

Das Problem mit git version 1.9.3 (Apple Git-50) sowie mit git version 2.0.1 geschieht.

aktualisiert Nach dem entsprechenden Eintrag aus dem KeyChain entfernen, erhalte ich folgenden Absturz:

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 

Nach diesem Absturz wird das Zertifikat Eintrag in der Keychain reoccurred. Das Seltsame ist, dass unter OS X 10.8 nichts zu meinem Schlüsselbund hinzugefügt wird, während ich aus dem Repository geholt habe.

Update 2 Wenn ich das gleiche versuchen, auf OS X 10.9, erhalte ich folgende Fehlermeldung:

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

Update 3 ich mit openssl mit diesen Zertifikaten erfolgreich verbinden kann, auch auf 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 

Das Problem ähnelt this one for GitHub, aber wir sind mit selbstsignierten Zertifikate.

+0

25299 bedeutet "Der angegebene Artikel existiert bereits im Schlüsselbund". Vielleicht hast du einen öffentlichen Schlüssel zweimal in die CRT-Dateien kopiert? – Phillip

+0

Danke für den Hinweis. Ich habe den Gegenstand aus dem KeyChain entfernt. –

+0

@ThomasS. Nun, hat es dein Problem gelöst? – musiKk

Antwort

9

Es sieht so aus, als ob Sie das gleiche Problem wie in this docker issue haben, wo sie schließen, dass es wahrscheinlich ein Fehler in OSX Curl ist.

In einigen other post schlagen sie vor, dass dies durch Seriennummer des Zertifikats verursacht werden kann, die entweder 1 ist oder zu groß ist, um in 32 Bits zu passen.

Auf Ihrem OS X 10.9 Fall denke ich, dass "Invalid Certificate" gelöst werden sollte, indem Sie das Zertifikat der Systemschlüsselkette als vertrauenswürdig hinzufügen (in this question diskutiert).

This post beschreibt einige Änderungen in OS X Curl, die verwandt zu sein scheinen. Nach meinem Verständnis könnte es eine Lösung sein, zu verschiedenen curl implementation wechseln (aber wahrscheinlich, dass nur funktionieren könnte, wenn git auch mit brauen installiert wäre).

+0

Leider half keine der Informationen, die ich in den Links gefunden habe, das Problem zu lösen. Ich musste von https mit Client-Zertifikaten auf SSH unter OS X 10.9+ umsteigen. –

2

Wie Michal bereits erwähnt, ist es ein OSX Curl Bug. Eine mögliche Lösung für wäre, eine git-Version installieren, die nicht die osx

  1. Macports curl Implementierung angewiesen Install: https://www.macports.org/install.php
  2. $ port -v selfupdate
  3. Port
git installieren $
+0

Leider ist dies keine Option, da wir nicht erwarten können, dass Macports auf den Computern des Endbenutzers installiert werden. –

+0

funktioniert nicht für mich am 10.11 .. Ich habe selbstgebraut, aber es scheitert immer noch –