特定の CA 証明書を使用して、セキュリティで保護されたサーバーに http 要求を投稿したいと考えています。
私はSpray 1.3.1を使用しています。コードは次のようになります。
val is = this.getClass().getResourceAsStream("/cacert.crt")
val cf: CertificateFactory = CertificateFactory.getInstance("X.509")
val caCert: X509Certificate = cf.generateCertificate(is).asInstanceOf[X509Certificate];
val tmf: TrustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
val ks: KeyStore = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(null);
ks.setCertificateEntry("caCert", caCert);
tmf.init(ks);
implicit val sslContext: SSLContext = SSLContext.getInstance("TLS");
sslContext.init(null, tmf.getTrustManagers(), null);
implicit val timeout: Timeout = Timeout(15.seconds)
import spray.httpx.RequestBuilding._
val respFuture = (IO(Http) ? Post( uri=Uri(url), content="my content")).mapTo[HttpResponse]
問題は、定義された暗黙の SSLContext が取得されず、実行時に「要求されたターゲットへの有効な証明書パスが見つかりません」というメッセージが表示されることです。
スプレー クライアントで使用する SSLContext を定義するにはどうすればよいですか?