Cách khắc phục curl: (60) Chứng chỉ SSL: Chuỗi chứng chỉ không hợp lệ khi sử dụng sudo


12

Vì vậy, bản nâng cấp Mavericks có nhiều vấn đề hơn với chứng chỉ.

Khi cố gắng cuộn một tệp từ máy chủ web của tôi bằng chứng chỉ tự ký, nó đã gặp lỗi "Chứng chỉ SSL: Chuỗi chứng chỉ không hợp lệ".

Điều này đã được sửa bằng cách thêm chứng chỉ vào móc khóa hệ thống của tôi và đặt nó để luôn cho phép SSL, thông tin tôi tìm thấy ở đâyđây .

Điều này hoạt động tốt và khi tôi cuộn một tập tin, nó tải xuống đúng cách.

Tuy nhiên, nếu tôi chạy curl với sudo trước đó (ví dụ: tôi có một đoạn script cần được chạy với sudo và thực hiện một curl trong đó) thì tôi sẽ quay lại cùng một thông báo lỗi.

Tôi đoán rằng root không đọc được từ móc khóa hệ thống?

Có ai biết một cách để khắc phục điều này?

Câu trả lời:


17

Nếu bạn lưu trữ chứng chỉ CA của mình trên hệ thống tệp (ở định dạng PEM), bạn có thể yêu cầu curl sử dụng chúng với

sudo curl --cacert /path/to/cacert.pem ...

Bạn cũng có thể tắt xác minh chứng chỉ với

sudo curl --insecure ...

Chỉnh sửa: Cập nhật liên quan đến thông tin phản hồi

Nếu bạn muốn đặt cái này vĩnh viễn, bạn nên tạo một .curlrctệp và đặt vào thư mục chính của bạn. sudocác lệnh có thể cần tệp này trong /var/rootTệp có các tùy chọn giống như dòng lệnh nhưng không có dấu gạch ngang. Một tùy chọn cho mỗi dòng:

cacert=/path/to/my/certs.pem

Cảm ơn câu trả lời của bạn, tập lệnh đang được chạy với sudo là của bên thứ ba và vì vậy tôi thực sự không thể sửa đổi lệnh curl. Không an toàn không thực sự là một lựa chọn. Điều này có thể được thực hiện trên toàn cầu?
Jacob Tomlinson

Bạn có thể tạo một tệp .curlrc và lưu trữ nó trong thư mục nhà của bạn, mặc dù sử dụng sudo, nó có thể cần phải là /var/root/.curlrc. Các tập tin nên chứa các tùy chọn mà không có dấu gạch ngang, mỗi dòng trên một dòng. Vì vậy, "cacert = / path / to / my / certs.pem"
Dan

1
+1 để thiết lập một tùy chọn rootcó sẵn .curlrcthay vì --insecure. Điều này chính xác như đã nói, đối với một kẻ tấn công ở vị trí mạng để làm như vậy, nó sẽ không quan trọng đối với MITM và tiêm mã.
zigg

Cảm ơn vì điều này, âm thanh như những gì tôi đang tìm kiếm. Tôi sẽ thử nó vào ngày mai và thưởng tiền thưởng nếu nó hoạt động.
Jacob Tomlinson

6

Root không đọc từ cài đặt tin cậy người dùng hiện tại, nhưng có cả cài đặt tin cậy quản trị viên và cài đặt tin cậy dành riêng cho người dùng gốc. (Chúng cũng khác với cài đặt tin cậy hệ thống .) Cũng lưu ý rằng cài đặt tin cậy chứng chỉ hơi khác so với việc chỉ thêm chứng chỉ vào móc khóa; bạn có thể đánh dấu một chứng chỉ là đáng tin cậy mà không cần thêm nó. (Tình hình chính xác ở đây không rõ ràng đối với tôi và các tài liệu tôi đã thấy rất mơ hồ.)

Bạn có thể đánh dấu một chứng chỉ là đáng tin cậy cho người dùng hiện tại của bạn là

$ security add-trusted-cert /path/to/cert.pem

nhưng điều đó không giúp ích gì với root. Giải pháp, như bạn có thể đoán bây giờ, là sudoở trên, sau đó đánh dấu nó là đáng tin cậy cho người dùng root cụ thể:

$ sudo security add-trusted-cert /path/to/cert.pem

hoặc để sử dụng -dcờ để thêm nó vào cài đặt tin cậy của quản trị viên:

$ security add-trusted-cert -d /path/to/cert.pem

(OS X sẽ bật lên hộp thoại mật khẩu để xác nhận cái này.)

Một trong hai cái sau dường như là đủ cho sudo curl.

Tham khảo: https://developer.apple.com/l Library / mac / Documentation / Darwin / Reference / Manager / man1 / security.1.html


Như tôi đã nói trong câu hỏi tôi đã thêm chúng vào móc khóa hệ thống cũng như móc khóa đăng nhập rồi.
Jacob Tomlinson

Bạn đã thực sự thử những gì tôi đề nghị? Tôi đã thử nó, trong chính xác tình huống mà bạn mô tả, và nó đã hoạt động. Tôi không rõ về tất cả các chi tiết - tài liệu rất mơ hồ - nhưng bạn nên biết rằng cài đặt tin cậy chứng chỉ KHÔNG hoàn toàn đồng nghĩa với việc chỉ thêm chứng chỉ vào móc khóa và cài đặt tin cậy chứng chỉ quản trị viên tồn tại tách biệt với cả hai hệ thống và cài đặt người dùng / móc khóa. (Dường như cũng có một bộ cài đặt người dùng dành riêng cho người dùng gốc trong hỗn hợp.) Tôi đã chỉnh sửa câu trả lời của mình để rõ ràng hơn về điểm này. Xin vui lòng, hãy thử giải pháp này.
Wes Campaigne

Có tôi đã thử giải pháp này khi bạn lần đầu tiên đăng nó. Các chứng chỉ nằm trong móc khóa hệ thống và được đặt là đáng tin cậy. Vẫn không có may mắn.
Jacob Tomlinson

5

Điều này thực sự nằm trong gợi ý đầu ra:

echo insecure >> ~/.curlrc

Ưu điểm của việc sử dụng giải pháp trên là nó hoạt động cho tất cả curlcác lệnh, nhưng không được khuyến khích vì nó có thể giới thiệu các cuộc tấn công MITM bằng cách kết nối với các máy chủ không an toàn và không tin cậy.


2

Nếu bạn sử dụng MacPorts (và tập lệnh của bên thứ 3 mà bạn đề cập không xóa nó khỏi $PATHhoặc cuộc gọi /usr/bin/curl), bạn có thể cài đặt certsynccurlcác cổng theo thứ tự này.

certsynclà một công cụ và một trình khởi chạy tương ứng sẽ xuất móc khóa hệ thống của bạn sang $prefix/etc/openssl/cert.pemvà cài đặt một liên kết tượng trưng $prefix/share/curl/curl-ca-bundle.crt -> $prefix/etc/openssl/cert.pemđể MacPorts curl sẽ tự động lấy chứng chỉ. certsynccũng sẽ tự động cập nhật các tệp được tạo khi bạn thay đổi móc khóa hệ thống.


Cảm ơn vì điều này, tôi muốn tránh sử dụng MacPorts nếu có thể.
Jacob Tomlinson


-1

Để thực hiện sudo curlcông việc (trên OSX Sierra), chúng tôi đã phải nhập chứng chỉ vào System.keychainvà tin tưởng vào đó. Điều này có thể được thực hiện thủ công trong ứng dụng Keychain hoặc sử dụng lệnh này:

sudo security add-trusted-cert -d -k /Library/Keychains/System.keychain /path/to/cert.pem

Điều quan trọng là cả hai chỉ định -dvà đặt thủ công đường dẫn đến móc khóa Hệ thống thông qua -kđể đảm bảo chứng chỉ thực sự được nhập ở đó nếu chưa.

Lệnh hoạt động mà không có sudo, nhưng sau đó sẽ yêu cầu mật khẩu thông qua hộp thoại UI, đây có thể là một trở ngại cho các tập lệnh.


Tôi nhận được lỗiSecCertificateCreateFromData: Unknown format in import.
rraallvv

Bất cứ ai bị đánh giá thấp, xin vui lòng biết rằng tôi đã viết rõ ràng "trên OSX Sierra" và đây là một giải pháp hiệu quả cho chúng tôi. Nếu nó không hoạt động trong các phiên bản OSX mới hơn thì có thể là do hỗ trợ hoặc công cụ OSX đã thay đổi. Hoặc một vấn đề như người bình luận trước đó, trong đó tệp đầu vào không ở định dạng được hỗ trợ (câu hỏi không chỉ định điều đó).
Alexander Klimetschek
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.