Chứng chỉ tự ký cài đặt yêu cầu thành công, nhưng Android hoạt động như thể chứng chỉ không có ở đó


17

Tôi đang cố gắng cài đặt chứng chỉ tự ký cho máy chủ web của mình trong Android 4.3. Tôi có tệp .crt trong thư mục gốc của thẻ SD (được mô phỏng thực sự vì tôi không có thẻ SD trong khe cắm).

Để cài đặt chứng chỉ, tôi vào Cài đặt -> Chung -> Bảo mật -> Lưu trữ thông tin xác thực -> Cài đặt từ bộ nhớ thiết bị.

Tôi nhận được một hộp thoại hiển thị tên của chứng chỉ (tên tệp trừ phần mở rộng .crt) mà tôi có thể sửa đổi (nhưng không), một "được sử dụng cho" kéo xuống với "VPN và ứng dụng" được chọn và văn bản ở dưới cùng của hộp thoại thông báo "Gói chứa: một chứng chỉ người dùng". Mọi thứ đều ổn, vì vậy tôi nhấp vào "Ok". Hộp thoại biến mất và một thông báo bánh mì nướng bật lên với "[tên] đã cài đặt".

Tuy nhiên nếu tôi ngay lập tức đi đến "Thông tin đáng tin cậy và chọn" Người dùng "thì không có gì cả! Chứng chỉ mới cũng không nằm trong" Hệ thống "nhưng tôi sẽ không mong đợi ở đó. Nếu tôi truy cập trình duyệt sau này và thử truy cập vào trình duyệt của tôi trang web, tôi vẫn nhận được cảnh báo rằng chứng chỉ của trang không đáng tin cậy. Tôi cũng đã thử khởi động lại, nhưng nó không tạo ra sự khác biệt.

Tôi đang làm gì sai? Việc thiếu thông báo lỗi hoàn toàn không hữu ích. Có thể chứng chỉ của tôi ở định dạng sai? Tôi đã thử sử dụng tệp .crt trong thư mục ssl của máy chủ và tôi đã thử chuyển đổi nó sang định dạng DER.

Cập nhật: Tôi đọc được ở đâu đó rằng Android yêu cầu chứng chỉ ở định dạng p12, vì vậy tôi đã chuyển đổi chứng chỉ Apache2 thành p12 bằng lệnh sau:

openssl pkcs12 -export -inkey server.key -in server.crt -out ~/server.p12

Sau đó, tôi đã lặp lại các bước trên, nhận được thông báo thành công tương tự và sau đó tiếp tục không thấy chứng chỉ trong thông tin đăng nhập của người dùng và tôi vẫn nhận được lỗi chứng chỉ không đáng tin cậy từ trình duyệt di động.

Câu trả lời:


19

Tôi gặp vấn đề tương tự khi Android thực sự cài đặt chứng chỉ, cho đến khi tôi tìm thấy trang web này mô tả một phương pháp phù hợp với tôi. Nó nắm rõ các bước sau:

  1. Tạo khóa riêng và chứng chỉ x509 công khai với tiện ích mở rộng v3 numq và được bật dưới dạng CA:

    sudo openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout /etc/ssl/private/my_site.key -out /etc/ssl/certs/my_site.crt -reqexts v3_req -extensions v3_ca

  2. Chuyển đổi chứng chỉ sang định dạng DER, được hiểu bởi Android:

    sudo openssl x509 -in /etc/ssl/certs/my_site.crt -outform der -out my_site.der.crt

  3. Sử dụng bất kỳ phương pháp nào để my_site.der.crttruy cập thiết bị Android của bạn - Tôi thấy thật dễ dàng khi có tệp được lưu trữ bởi máy chủ web của tôi và tải xuống qua trình duyệt Android, sau đó tự động cho phép bạn cài đặt nó.

Mặc dù tôi muốn bước 1 được chia thành hai (1a thế hệ khóa riêng và thế hệ 1b. Chứng chỉ công khai), tôi đã không đầu tư quá nhiều thời gian để điều tra làm thế nào. Xin vui lòng cho tôi biết trong một nhận xét nếu bạn tìm thấy một cách làm việc, cảm ơn.

(Thay vì thêm một nhận xét, tôi cảm thấy đây thực sự là một phần của câu trả lời để tham khảo trong tương lai, vì vậy tôi đang chỉnh sửa nó. --Michael)

Thay vì tạo chứng chỉ được kích hoạt dưới dạng CA, tôi đã tạo CA tự ký và sau đó ký lại khóa / csr hiện có của mình với CA mới. Sau đó, tôi đã thêm CA tự ký vào Android và voila! Nó đã làm việc!

Tạo CA tự ký:

openssl genrsa -out rootCA.key 4096
openssl req -x509 -new -nodes -key rootCA.key -days 3650 -out rootCA.pem

Ký lại CSR hiện có mà tôi có từ việc tạo khóa từ

openssl x509 -req -in existing.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out existing.crt -days 3649

Bây giờ bằng cách sử dụng một hình thức sửa đổi của lệnh thứ hai của bạn, tôi đã chuyển đổi chứng chỉ CA thành dạng DER:

openssl x509 -in /etc/apache2/ssl/rootCA.pem -outform der -out ~/rootCA.der.crt

Điều tuyệt vời ở đây là, bất kỳ chứng chỉ không tin cậy bổ sung nào đã được ký lại với CA tự ký mới giờ đây sẽ được tin cậy trên bất kỳ thiết bị nào hơn là cài đặt CA mới mà không cần cài đặt bất cứ thứ gì khác. Điều này không giải quyết chính xác vấn đề tin tưởng các trang web mà bạn không kiểm soát được, nhưng nó có thể dễ dàng hơn nếu bạn có bất kỳ ảnh hưởng nào (nói) bộ phận CNTT của bạn cho một máy chủ nội bộ hoặc một cái gì đó.


1
Tôi đã có chứng chỉ tôi cần cài đặt, vì vậy tôi đã thử bước 2 và nó vẫn không hiển thị trong Thông tin xác thực người dùng sau khi tuyên bố thành công trong việc cài đặt và Chrome vẫn hiển thị lỗi "trang web không đáng tin cậy" sau khi khởi động lại.
Michael

1
Có thể có điều gì đó về tiện ích mở rộng v3 numq và được bật dưới dạng CA mà chứng chỉ bắt buộc phải có cho Android để sử dụng không? Nếu vậy, có một lệnh mà tôi có thể sử dụng để lấy chứng chỉ hiện có và thêm thông tin đó vào đó, vì tôi không có quyền kiểm soát tất cả các certs tôi muốn cài đặt.
Michael

3
Để trả lời nửa đầu câu hỏi trước đây của tôi, tôi đã đọc trang bạn đã liên kết và có vẻ như vấn đề là Android từ chối cài đặt chứng chỉ tự ký (nhưng không phải là CA tự ký). Điều này dường như chưa được xác định rõ ràng và việc Android giả vờ cài đặt khiến nó thậm chí còn tồi tệ hơn. Nhưng câu hỏi vẫn còn, nếu tôi có một chứng chỉ tự ký mà tôi không có quyền kiểm soát, có cách nào để "CA" - xác minh nó để tôi có thể cài đặt nó không?
Michael

1
@ Tôi hy vọng bạn không phiền, tôi sẽ chỉnh sửa câu trả lời của bạn để đưa giải pháp của tôi, thay vì đưa nó vào các bình luận, vì nó thực sự thuộc về một phần của câu trả lời.
Michael

1
Tôi không hiểu làm thế nào yêu cầu ký hiện có .csr được tạo. Tôi nghĩ rằng đây là điểm thiếu cuối cùng cho một hướng dẫn từng bước hoàn chỉnh.
cguenther
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.