2009-04-06 32 views
10

See related question.Làm thế nào để sử dụng tệp PEM để tạo một ổ cắm SSL trong Java?

Tôi có tệp PEM được cung cấp cho tôi và được thông báo rằng cần thiết thiết lập ổ cắm SSL kết nối với máy chủ C++ cho một số cuộc gọi API. Có ai biết làm thế nào tôi có thể đọc trong tập tin PEM và kết nối? Tôi cũng đã được cung cấp mật khẩu ngẫu nhiên.

+0

Trùng lặp; Tôi nghĩ rằng phiên bản khác của câu hỏi là nhiều thông tin hơn. – erickson

Trả lời

9

Có vẻ như tệp PEM là một chứng chỉ ứng dụng khách để bạn sử dụng để đăng nhập vào máy chủ. Nếu đó là chứng chỉ ứng dụng khách, và có vẻ như đó là, bạn có thể sẽ cần một tệp tin chứng thực cũng để sử dụng trong việc xác thực chứng chỉ máy chủ để thiết lập kết nối.

Các chứng chỉ CA cần phải đi vào một cửa hàng tin cậy và các chứng chỉ khách hàng của bạn cần phải đi vào kho khóa. Trong Java, cả hai đều là JKS (mặc dù nó có hỗ trợ giới hạn cho PKCS12.) Có các vị trí kho khóa/tin cậy mặc định cho JRE cũng như cho mỗi người dùng. Bạn cũng có thể chỉ định các vị trí bên ngoài cho các tệp này trong mã của mình, như trong ví dụ bên dưới. Thư viện commons-ssl dường như có thể hỗ trợ PEM trực tiếp, mà không cần JKS, nhưng tôi đã không sử dụng nó.

Cụm mật khẩu mặc định cho các keystore này trong Java là "thay đổi" không có dấu ngoặc kép.

This page cho thấy bạn phải đọc PEM vào kho khóa/kho lưu trữ của bạn. Đây là another example.

Một khi bạn đã truststore và keystore của bạn thiết lập đúng cách, bạn cần phải vượt qua JSSE system properties sau để JVM của bạn:

javax.net.ssl.keyStore 
javax.net.ssl.keyStoreType 
javax.net.ssl.keyStorePassword 
javax.net.ssl.trustStore 
javax.net.ssl.trustStoreType 
javax.net.ssl.trustStorePassword 

Bạn có thể xác định chúng là thông số -D để JRE hoặc, như trong ví dụ dưới đây, theo chương trình.

Sau khi bạn hoàn thành, bạn sẽ có được commons-ssl example khi tạo ổ cắm. Ngoài ra, heres api Java cho SSLSocket. Heres cũng là một example mà không sử dụng bất kỳ commons apache.

+1

Ahmm .. câu trả lời hay - nhưng anh ấy thực sự hỏi về C++, chứ không phải Java. – Guss

+4

Trên thực tế, ông đã gắn thẻ Java và JKS, đó là Java KeyStore. Anh ta muốn kết nối với một máy chủ từ xa sẽ được thực hiện bằng cách sử dụng một ổ cắm SSL. Thực tế là phía bên kia C++ không liên quan đến cơ chế kết nối. –

0

Bạn cần thư viện xử lý SSL. Như John Ellinwood lưu ý, một số khung công tác (như Java 2 SE) cung cấp các khung công tác này, cho những người khác bạn cần sử dụng các thư viện của bên thứ ba.

Nhà phát triển C thường sử dụng openssl trực tiếp, nhưng không thể nói là dễ dàng và khi sử dụng C++ có một số "gotchas" dễ rơi vào.

Tôi khuyên bạn nên sử dụng thư viện mạng C++ có hỗ trợ SSL, chẳng hạn như thư viện mạng của QT hoặc Poco NetSSL. Xem here đối với một số tài liệu hướng dẫn and here cho tài liệu API - bạn có thể muốn xem initializeClient để xem tệp PEM trực tiếp.

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