LoginSignup
4
6

More than 5 years have passed since last update.

WebView で自己署名サーバ証明書を使ったサイトを表示する

Posted at

JavaFX 8 では WebView を使用して Java アプリケーション上に WebKit ベースのブラウザ機能を配置することが出来ます。ただこれ自己署名証明書を使用した HTTPS サイトと通信しようとするとデフォルトでは真っ白になったまま何も表示されない状態になってしまいます。

プロダクション環境では信頼できる CA から発行された (高価で期限付きの) サーバ証明書を使用しても、ローカルやステージング環境では自己署名証明書で済ませていることがよくありますよね。

WebView (WebEngine) は根本の通信部分で HttpsURLConnection を使用していますので、ステージング環境でのみ全てのサーバ証明書を検証しない TrustManager を設定してやれば自己署名証明書を使用したサイトも WebView で表示されるようになります (以下のコードは Scala ですが Java への読み替えは難しくないと思います)。

import java.security.SecureRandom
import java.security.cert.X509Certificate
import javax.net.ssl.{HttpsURLConnection, SSLContext, TrustManager, X509TrustManager}

val trustAll:Array[TrustManager] = Array(
  new X509TrustManager {
    override def getAcceptedIssuers:Array[X509Certificate] = null
    override def checkClientTrusted(x509Certificates:Array[X509Certificate], s:String):Unit = None
    override def checkServerTrusted(x509Certificates:Array[X509Certificate], s:String):Unit = None
  }
)
val sc = SSLContext.getInstance("SSL")
sc.init(null, trustAll, new SecureRandom())
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory)

この方法は WebView だけでなく URLURLConnection クラスを使用して自己署名証明書を使用したサイトと通信する場合にも有効です。

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6