2010-07-13 36 views
7

Tôi có một số tài nguyên tôi phải truy cập bằng SSL sử dụng chứng chỉ tự ký. Nói chung, hầu hết các công cụ đều có cài đặt đơn giản để cho phép chúng được truy cập mà không có lỗi hoặc chỉ là cảnh báo. Tuy nhiên, có vẻ như cách thích hợp để thực hiện việc này với JVM là nhập chứng chỉ ký vào một kho khóa như là một CA.Làm thế nào để sử dụng SSL với chứng chỉ tự ký trong groovy?

Tôi có một tập lệnh groovy tôi muốn sử dụng, nhưng tôi muốn tập lệnh của tôi hoạt động độc lập trên bất kỳ JVM nào mà không sửa đổi kho khóa hoặc phân phối kho khóa mới. Có cách nào đơn giản để ghi đè xác minh chứng nhận không?

Trả lời

17

Sau một ít nghiên cứu, tôi tìm thấy this post. Dưới đây là những gì tôi đã sử dụng:

import javax.net.ssl.HostnameVerifier 
import javax.net.ssl.HttpsURLConnection 
import javax.net.ssl.SSLContext 
import javax.net.ssl.TrustManager 
import javax.net.ssl.X509TrustManager 

def nullTrustManager = [ 
    checkClientTrusted: { chain, authType -> }, 
    checkServerTrusted: { chain, authType -> }, 
    getAcceptedIssuers: { null } 
] 

def nullHostnameVerifier = [ 
    verify: { hostname, session -> true } 
] 

SSLContext sc = SSLContext.getInstance("SSL") 
sc.init(null, [nullTrustManager as X509TrustManager] as TrustManager[], null) 
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()) 
HttpsURLConnection.setDefaultHostnameVerifier(nullHostnameVerifier as HostnameVerifier) 

Tự chịu rủi ro khi sử dụng: điều này xác minh việc xác minh giấy chứng nhận!

+3

Nói chung, hvgotcodes là một giải pháp tốt hơn. Mileage của bạn có thể thay đổi, tất nhiên. Vấn đề với giải pháp của bạn là tất cả các máy chủ bây giờ là hợp lệ thay vì chỉ là số ít bạn thực sự có ý định để cho qua. Nếu mã của bạn được kiểm soát chặt chẽ và bạn chắc chắn rằng bạn sẽ chỉ kết nối với các nguồn "đáng tin cậy", bạn sẽ ổn. Tuy nhiên, bạn có thể dễ bị tổn thương do nhầm lẫn DNS và bất kỳ số lượng sự cố nào khác mà từ đó bạn sẽ được bảo vệ nếu bạn nhập chứng chỉ của mình vào một cửa hàng tin cậy. Bạn cũng có thể đặt thuộc tính javax.net.ssl.trustStore tại thời gian chạy, nếu bạn có hành vi năng động hơn. –

+0

Nói chung, tôi đồng ý. Nhưng có một số bối cảnh kịch bản nhất định, ở đó rất hay để bỏ qua việc quản lý chứng chỉ hoàn toàn; ví dụ, nơi các máy chủ thử nghiệm được tạo động và các kho khóa của khách hàng sẽ phải được giữ liên tục đồng bộ. Cũng cần lưu ý rằng các ngôn ngữ động khác như ruby ​​và python làm cho cài đặt cấu hình này đơn giản và không thực thi chuỗi chứng chỉ theo mặc định, tương ứng. – ataylor

+2

Chỉ cần đặt chữ in đậm này cho người đọc sao chép/dán mà không xem qua nhận xét của @ BrianM.Carr: ** giải pháp này vô hiệu hóa các bước xác minh chứng chỉ hoàn toàn, do đó làm cho kết nối có khả năng dễ bị tấn công MITM **. – Bruno

7

tôi chỉ phải đi qua điều này với một ứng dụng grails tôi đang làm việc trên. Bạn sẽ chỉ xử lý keystore một lần. Giả sử bạn có chứng chỉ, chỉ cần đặt nó vào kho khóa của bạn, sau đó trỏ jvm của bạn tại kho khóa thông qua các đạo cụ dòng lệnh ...

chỉnh sửa - tôi không biết cách nào để bỏ qua nhu cầu cho kho khóa. Nhưng bạn có thể tạo một cái chỉ với (các) chứng chỉ bạn cần và truyền nó đi với ứng dụng của bạn. Bạn chỉ làm điều đó một lần.

chỉnh sửa chỉnh sửa - ở đây là lệnh cho keytool và java CL chống đỡ

keytool -import -trustcacerts -alias www.the-domain.com -file the-cert.der -keystore store.jks 

-Djavax.net.ssl.trustStore=/path/to/store.jks 
-4

Nếu bạn gọi chương trình dòng lệnh curl thay vì sử dụng các công cụ groovy/JVM bản xứ, bạn có thể vô hiệu hóa việc kiểm tra giấy chứng nhận cho người dùng của bạn bằng cách chạy các lệnh sau từ dòng lệnh:

$ echo 'insecure' >>~/.curlrc 
+1

Bài đăng này được thảo luận về meta: http://meta.stackoverflow.com/questions/266368/why-this-post-is-not-very-low-quality –

+2

@staticx, ngoài ra, nó đặc biệt không an toàn vì nó sẽ ảnh hưởng đến ** tất cả ** các kết nối được thực hiện bằng cách sử dụng 'curl' bởi người dùng đó. – Bruno

+0

@staticx Hmm, bạn nói đúng, đó có thể là những gì anh ấy gợi ý. Câu trả lời đã sửa đổi. – ataylor

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