2016-01-21 19 views
6

Tôi có một số vấn đề với cấu hình http Akka ở phía máy khách. Tôi đang cố gắng kết nối với máy chủ không cung cấp: - chứng chỉ đã ký công khai - chứng chỉ tương ứng với tên máy chủ Tôi không có mặt trên nginx này nên tôi không thể thay đổi cấu hình phía máy chủ. Tôi chỉ có thể thay đổi phía khách hàng.vấn đề http SSLConfig akka với xác minh tên máy chủ và xác thực chứng chỉ

Sau rất nhiều cuộc điều tra về cấu hình SSL, tôi đã phát hiện ra rằng tôi cần phải cấu hình tùy chọn SSL trong application.conf ở hai cấp độ khác nhau:

akka.ssl-config.ssl.loose.acceptAnyCertificate=true 
akka.ssl-config.loose.disableHostnameVerification = true 

ssl-config.loose.acceptAnyCertificate=true 
ssl-config.loose.disableHostnameVerification = true 

Tôi có kiểm tra cấu hình là tốt với

log-config-on-start = "on" 

Vấn đề là tôi vẫn nhận được lỗi ở cấp AKKA debug (không phải là rất rõ ràng)

[ingestionApiClient-akka.actor.default-dispatcher-13] [akka://ingestionApiClient/user/StreamSupervisor-0/flow-216-1-unknown-operation] closing output 

Nhìn vào Wireshark Tôi đã tìm thấy đó là một vấn đề xác nhận giấy chứng nhận

TLSv1 Record Layer: Alert (Level: Fatal, Description: Certificate Unknown) 

Tôi cho rằng cấu hình JVM đang giám sát tất cả những gì tôi đã làm để tôi cũng cố gắng làm theo phương pháp này để sửa đổi cấu hình JVM SSL: Java SSL: how to disable hostname verification

Không có vấn đề gì với cấu hình SSLContext và chuyển nó sang akka http vì tôi có thể đặt mặc định HttpsContext với

val sc = SSLContext.getInstance("TLS") 
*...configuration...* 
val customContext =HttpsContext(sc, sslParameters = Some(params)) 
Http().setDefaultClientHttpsContext(customHttpsContext) 

Nhưng tôi không thể tìm thấy cách nào để định cấu hình trình xác minh tên máy chủ mặc định. Lớp Http không có bất kỳ phương pháp như Http().setDefaultHostnameVerifier

này như thế nào tôi kết nối đến máy chủ

val dataIngestFlow = Http().outgoingConnectionTls(config.httpEndpointHost,config.httpEndpointPort) 

Làm thế nào tôi có thể đạt được điều này? Cảm ơn rất nhiều sự giúp đỡ của bạn

Trả lời

0

Tôi không biết phiên bản akkaakka-http nào bạn sử dụng nhưng bạn đã cố gắng đặt trường cấu hình akka.ssl-config.hostnameVerifierClass để triển khai cụ thể giao diện HostNameVerifier?

Các xác minh đơn giản nhất mà chấp nhận tất cả mọi thứ trông như thế này:

public static class AcceptAllHostNameVerifier implements HostnameVerifier { 
    @Override 
    public boolean verify(String s, SSLSession sslSession) { 
    return true; 
    } 
} 
0

Tôi cũng đã bị mắc kẹt trong tương tự issue và đã nhận được tương tự errors. với mã sau tôi đã có thể nhận được thông qua:

val trustStoreConfig = TrustStoreConfig(None, Some("/etc/Project/keystore/my.cer")).withStoreType("PEM") 
val trustManagerConfig = TrustManagerConfig().withTrustStoreConfigs(List(trustStoreConfig)) 

val badSslConfig = AkkaSSLConfig().mapSettings(s => s.withLoose(s.loose 
    .withAcceptAnyCertificate(true) 
    .withDisableHostnameVerification(true) 
).withTrustManagerConfig(trustManagerConfig)) 

val badCtx = Http().createClientHttpsContext(badSslConfig) 

Http().superPool[RequestTracker](badCtx)(httpMat) 
Các vấn đề liên quan