2012-03-26 7 views
16

Wann würde man die Option --cacert Option im Vergleich zu der --capath Option innerhalb curl (CLI das ist).Unterschied zwischen --cacert und --capath in curl?

--cacert scheint auf eine monolithische Datei zu verweisen, die mehrere PEMs enthält. Angenommen, es wird durchsucht, um den passenden Hostnamen zu finden?

--capath scheint auf ein Verzeichnis zu verweisen, in dem mehrere Dateien gespeichert sind. Ruft curl das entsprechende Zertifikat als Dateinamen auf?

Antwort

15

Vom docs:

--cacert (HTTPS) Weist curl die angegebene Zertifikatsdatei zu verwenden, um die Peer-zu überprüfen. Die Datei kann mehrere CA-Zertifikate enthalten. Die Zertifikate müssen im PEM-Format vorliegen. Wenn diese Option mehrmals verwendet wird, wird die letzte verwendet.

--capath (HTTPS) Weist curl an, das angegebene Zertifikatverzeichnis zur Überprüfung des Peers zu verwenden. Die Zertifikate müssen im PEM-Format vorliegen und das Verzeichnis muss mit dem mitgelieferten Dienstprogramm c_rehash mit openssl verarbeitet worden sein. Zertifikatverzeichnisse werden unter Windows nicht unterstützt (da c_rehash Symbolink-Links verwendet, um sie zu erstellen). Die Verwendung von --capath kann curl ermöglichen, https-Verbindungen viel effizienter als mit --cacert herzustellen, wenn die Datei --cacert viele CA-Zertifikate enthält. Wenn diese Option mehrmals verwendet wird, wird die letzte verwendet.

Wenn Sie also --cacert angeben, werden die CA-Zertifikate in der angegebenen Datei gespeichert. Diese CA-Zertifikate werden verwendet, um die Zertifikate von Remote-Servern zu überprüfen, mit denen cURL eine Verbindung herstellt.

Die Option --capath wird verwendet, um ein Verzeichnis anzugeben, das die CA-Zertifikate und nicht eine einzelne Datei enthält. Das c_rehash-Dienstprogramm sollte verwendet werden, um das Verzeichnis vorzubereiten, d. H. Die notwendigen Verbindungen zu erzeugen. Der Hauptvorteil bei der Verwendung von --capath scheint zu sein, dass es effizienter ist als der --cacert-Ansatz mit einer einzigen Datei, wenn Sie viele CA-Zertifikate haben.

Hier ist ein Skript, das wohl tut, was c_rehash tut:

for file in *.pem; do ln -s $file `openssl x509 -hash -noout -in $file`.0; done 

Mit beiden Optionen sollten Sie nur enthalten CA-Zertifikate von CAs vorsichtig sein, denen Sie vertrauen. Wenn Sie zum Beispiel wissen, dass die Remote-Server immer mit Zertifikaten von YourCompanyCA ausgestellt werden sollten, dann ist dies das einzige CA-Zertifikat, das Sie hinzufügen sollten.

+0

Warum effizienter? Weil es das cert über den filesytem Namen nachschlagen kann? – Xailor

+0

@Xepoch Ja, ich denke, es erstellt Dateien mit dem Hash des Subjektnamens jedes Zertifikats und verbindet diese Hash-Dateien dann wieder mit dem ursprünglichen Zertifikat. Dies macht Lookups schneller. Ich habe ein kleines Skript hinzugefügt, das wahrscheinlich tut, was c_rehash tut, um es vielleicht klarer zu machen. – PhilR

+0

Da Ubuntu über ein ca-Zertifikatverzeichnis verfügt, wenn ich die neueste ca-bundle.crt von der Curl Haxx-Website herunterladen möchte, was soll ich tun? Einfach die Datei in das Verzeichnis fallen lassen und diesen Befehl ausführen? Oder ist eine ubuntu-spezifische Konfiguration erforderlich? – CMCDragonkai

1

Unter Windows können Sie den folgenden als Batch-Datei und übergeben im capath Ordnernamen ausführen:

c_rehash.cmd:

@echo off 
setlocal enableextensions enabledelayedexpansion 
if \%1\ EQU \\ goto :usage 
pushd %1 
if NOT ERRORLEVEL 0 goto :usage 
del *.0 
for %%I in (*.pem) do call :hash %%I 
popd 
goto :eof 
:hash 
for /F "usebackq" %%J in (`openssl x509 -in %1 -hash -noout`) do mklink %%J.0 %1 
goto :eof 
:usage 
echo Usage: 
echo. 
echo Rehash a folder of x509 Certificates for Curl 
echo. 
echo %~n0 ^<Folder^> 

Beispiel:

c_rehash c:\cacerts