2012-03-26 26 views
16

Khi nào một người sử dụng tùy chọn --cacert so với tùy chọn --capath trong phạm vi curl (CLI có nghĩa là).Sự khác biệt giữa --cacert và --capath trong curl?

--cacert dường như tham chiếu đến tệp nguyên khối chứa nhiều PEM. Giả sử nó quét qua để tìm tên máy chủ phù hợp?

--capath dường như tham chiếu thư mục chứa nhiều tệp. Curl có nhận chứng chỉ thích hợp làm tên tệp trong đó không?

Trả lời

15

Từ docs:

--cacert (HTTPS) Cho curl để sử dụng các tập tin giấy chứng nhận theo quy định để xác minh các đồng đẳng. Tệp có thể chứa nhiều chứng chỉ CA. Chứng chỉ phải ở định dạng PEM. Nếu tùy chọn này được sử dụng nhiều lần lần, tùy chọn cuối cùng sẽ được sử dụng.

--capath (HTTPS) Yêu cầu curl sử dụng thư mục chứng chỉ được chỉ định để xác minh ngang hàng. Chứng chỉ phải ở định dạng PEM và thư mục phải được xử lý bằng tiện ích c_rehash được cung cấp với openssl. Thư mục chứng chỉ không được hỗ trợ trong Windows (vì c_rehash sử dụng liên kết symbolink để tạo chúng). Sử dụng --capath có thể cho phép curl thực hiện kết nối https hiệu quả hơn nhiều so với bằng --cacert nếu tệp --cacert chứa nhiều chứng chỉ CA. Nếu tùy chọn này được sử dụng nhiều lần, tùy chọn cuối cùng sẽ được sử dụng.

Vì vậy, nếu bạn chỉ định --cacert, các chứng chỉ CA được lưu trữ trong tệp được chỉ định. Các chứng chỉ CA này được sử dụng để xác minh các chứng chỉ của các máy chủ từ xa mà cURL kết nối tới.

Tùy chọn --capath được sử dụng để chỉ định một thư mục chứa các chứng chỉ CA chứ không phải một tệp duy nhất. Tiện ích c_rehash nên được sử dụng để chuẩn bị thư mục tức là tạo các liên kết cần thiết. Lợi ích chính của việc sử dụng --capath dường như là hiệu quả hơn so với phương pháp --cacert đơn lẻ nếu bạn có nhiều chứng chỉ CA.

Dưới đây là một kịch bản mà có lẽ những gì c_rehash làm:

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

Với cả hai lựa chọn bạn nên cẩn thận để chỉ bao gồm CA certs từ CA mà bạn tin tưởng. Ví dụ: nếu bạn biết các máy chủ từ xa phải luôn được cấp chứng chỉ từ YourCompanyCA, thì đây là chứng chỉ CA duy nhất bạn nên bao gồm.

+0

Tại sao hiệu quả hơn? Bởi vì nó có thể tra cứu chứng chỉ thông qua tên tệp tin? – Xailor

+0

@Xepoch Có, tôi nghĩ rằng nó tạo ra các tập tin với băm của tên chủ đề của mỗi cert và sau đó liên kết các tập tin băm trở lại cert gốc. Điều này giúp tra cứu nhanh hơn. Tôi đã thêm một kịch bản nhỏ có thể làm những gì c_rehash có thể làm cho nó rõ ràng hơn. – PhilR

+0

Vì Ubuntu có thư mục chứng chỉ ca, nếu tôi muốn tải xuống ca-bundle.crt gần đây nhất từ ​​trang web Curl Haxx, thì tôi nên làm gì? Chỉ cần thả tệp vào thư mục và chạy lệnh đó? Hoặc là có một số cấu hình cụ thể ubuntu cần thiết? – CMCDragonkai

1

Trên Windows bạn có thể chạy sau khi một tập tin thực thi và vượt qua trong tên thư mục capath:

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^> 

Ví dụ:

c_rehash c:\cacerts 
Các vấn đề liên quan