2013-05-10 50 views
19

Chúng tôi đang cố gắng triển khai một số chức năng của Dịch vụ web từ một trong các đối tác của chúng tôi. Bây giờ, nội dung được truyền đi ong phải được mã hóa bằng khóa công khai mà chúng tôi phải cung cấp.X.509: Khóa riêng/khóa công khai

Đặc điểm kỹ thuật bảo mật cho biết chứng chỉ công khai phải là tiêu chuẩn X.509. Không X.509 dựa vào phương pháp khóa riêng tư/công khai không? Bởi vì tôi chỉ nhận được một tập tin .pem nào, có chứa một khóa riêng, và một chứng chỉ, nhưng không có khóa công khai, sử dụng lệnh sau:

openssl req -new -x509 -days 365 -nodes -out ./cert.pem -keyout ./cert.pem 

Tôi có phải sửa đổi lệnh để tạo ra một cá nhân và một khóa công khai?

Trả lời

54

Các bước cơ bản dòng lệnh để tạo ra một khóa bí mật và công khai sử dụng OpenSSL là như sau

openssl genrsa -out private.key 1024 
openssl req -new -x509 -key private.key -out publickey.cer -days 365 
openssl pkcs12 -export -out public_privatekey.pfx -inkey private.key -in publickey.cer 

Bước 1 - tạo ra một tin quan trọng

Bước 2 - tạo ra một giấy chứng nhận X509 (cer tập tin) chứa khóa công cộng của bạn mà bạn tải lên khi đăng ký ứng dụng riêng tư của bạn (hoặc nâng cấp lên ứng dụng đối tác).

Bước 3 - Xuất chứng chỉ x509 và khóa cá nhân của bạn vào tệp pfx. Nếu thư viện trình bao bọc đã chọn của bạn sử dụng tệp .pem để ký yêu cầu thì bước này không bắt buộc.

Hy vọng điều đó sẽ hữu ích! This answer explains các đuôi tệp khác nhau.

+1

Tôi không hoàn toàn chắc chắn lệnh thứ 3 làm gì, nhưng nó có vẻ hoạt động khá độc đáo với privatekey.pem và publickey.cer. Cảm ơn! – Ahatius

+0

Trong ví dụ này, liệu 'privatekey.pem' chỉ chứa khóa riêng tư hay khóa công khai? –

+5

Bạn đang sử dụng phần mở rộng tệp sai trong lệnh đầu tiên của mình. Bạn nên sử dụng '.key' thay vì' .pem', để tránh nhầm lẫn. Tệp kết quả sẽ chỉ đơn giản là một khóa riêng. Ai đó có thể gửi tệp '.pem' cho người khác do nhầm lẫn, tạo ra sự cố bảo mật. – w0rp

8

Khóa công cộng được lưu trữ bên trong chứng chỉ x.509. Chứng chỉ liên kết thông tin nhận dạng (tên thường gọi, địa chỉ, bất kỳ thông tin nào khác) với khóa công khai này.

+1

Vâng, trong trường hợp của tôi có một ** BEGIN CERTIFICATE ** và ** BEGIN PRIVATE KEY **. CERTIFICATE là khóa công khai của tôi? Và tôi có thể chia chúng thành các tệp riêng biệt, vì vậy phía bên kia không nhận được khóa riêng tư? – Ahatius

+2

Có, phần CHỨNG NHẬN là chứng chỉ (mã hóa base64, có khóa công khai), PRIVATE KEY - là, doh, khóa riêng. Bạn có thể (và thực sự NÊN) tách chúng ra và chỉ gửi phần chứng chỉ cho bên kia. –

+2

Ok, cảm ơn rất nhiều. Tôi sẽ gửi cho họ phần CERTIFICATE sau đó :) Tôi muốn upvote, nhưng rõ ràng là tôi đã đạt đến giới hạn bỏ phiếu hàng ngày của mình: O – Ahatius

1

Tạo cặp khóa công khai riêng.

openssl req -x509 -newkey rsa:2048 -keyout private.key -out public.cert -days 365 

Tùy chọn, kết hợp cặp thành một tệp.

openssl pkcs12 -export -inkey private.key -in public.cert -out certificate.pfx 

Điều này dẫn đến các tệp sau.

private.key 
certificate.pfx 
public.cert 

Xem thêm

Các vấn đề liên quan