質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
HTTPS

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

1回答

1318閲覧

androidでjetty8を使用して、httpsサーバ(ssl接続)機能を実現したい

tamago83

総合スコア60

HTTPS

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2020/04/14 21:06

編集2020/04/14 21:08

前提・実現したいこと

androidで、httpsサーバサイドプログラムを作成しています。
http実装はできたのですが、httpsにすると、うまく動作せず、以下のエラーメッセージが表示されます。

発生している問題・エラーメッセージ

java.security.KeyStoreException: JKS not found at java.security.KeyStore.getInstance(KeyStore.java:890) at org.eclipse.jetty.util.security.CertificateUtils.getKeyStore(CertificateUtils.java:52) at org.eclipse.jetty.util.ssl.SslContextFactory.getKeyStore(SslContextFactory.java:1052) at org.eclipse.jetty.util.ssl.SslContextFactory.loadKeyStore(SslContextFactory.java:1012) at org.eclipse.jetty.util.ssl.SslContextFactory.doStart(SslContextFactory.java:264) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) at org.eclipse.jetty.server.ssl.SslSelectChannelConnector.doStart(SslSelectChannelConnector.java:612) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) at org.eclipse.jetty.server.Server.doStart(Server.java:293) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
Caused by: java.security.NoSuchAlgorithmException: JKS KeyStore not available at sun.security.jca.GetInstance.getInstance(GetInstance.java:159) at java.security.Security.getImpl(Security.java:590) at java.security.KeyStore.getInstance(KeyStore.java:887) at org.eclipse.jetty.util.security.CertificateUtils.getKeyStore(CertificateUtils.java:52)  at org.eclipse.jetty.util.ssl.SslContextFactory.getKeyStore(SslContextFactory.java:1052)  at org.eclipse.jetty.util.ssl.SslContextFactory.loadKeyStore(SslContextFactory.java:1012)  at org.eclipse.jetty.util.ssl.SslContextFactory.doStart(SslContextFactory.java:264)  at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)  at org.eclipse.jetty.server.ssl.SslSelectChannelConnector.doStart(SslSelectChannelConnector.java:612)  at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)  at org.eclipse.jetty.server.Server.doStart(Server.java:293)  at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)  at jp.tama.rtc.domain.usecase.ServerUseCase.setServer(ServerUseCase.kt:85)  at jp.tama.rtc.domain.usecase.ServerUseCase.start(ServerUseCase.kt:31)  at jp.tama.rtc.ui.MainActivity$onCreate$2.invokeSuspend(MainActivity.kt:33)  at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)  at kotlinx.coroutines.DispatchedTask.run(Dispatched.kt:241)  at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:594)  at kotlinx.coroutines.scheduling.CoroutineScheduler.access$runSafely(CoroutineScheduler.kt:60)  at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:740) 

該当のソースコード

class ServerUseCase(private val port:Int) { private val server: Server = Server(80) private val sslContextFactory: SslContextFactory = SslContextFactory() fun start(){ if(server.isStarted){ Timber.d("already server start") return } this.setServer() } private fun checkSslKey(sslKey:String){ val readFile = File(MainApplication.instance.filesDir, sslKey) Timber.d(readFile.absolutePath) if(!readFile.exists()){ MainApplication.instance.openFileOutput(sslKey, Context.MODE_PRIVATE).use { it.write(MainApplication.instance.assets.open(sslKey).readBytes()) } } } private fun setServer(){ val sslKey:String = "test.jks" val sslPassword: String = "test" checkSslKey(sslKey) // ssl設定 sslContextFactory.isTrustAll = true sslContextFactory.keyStoreType = "JKS" sslContextFactory.keyStorePath = "${MainApplication.instance.filesDir}/$sslKey" sslContextFactory.setKeyManagerPassword(sslPassword) sslContextFactory.setKeyStorePassword(sslPassword) sslContextFactory.isAllowRenegotiate = true // connector作成 val httpsConnector = SslSelectChannelConnector(sslContextFactory) httpsConnector.port = 443 server.addConnector(httpsConnector) val servletHandler = ServletContextHandler(ServletContextHandler.SESSIONS) servletHandler.addServlet(ServletHolder(WebserverServletUseCase()), "/server") val connector: MutableList<Connector> = mutableListOf() connector.add(httpsConnector) server.connectors =connector.toTypedArray() // サーバにハンドラー設定 val handlerList = HandlerList() handlerList.addHandler(servletHandler) server.handler = handlerList server.start() server.join() } }

試したこと

jksファイルは以下の方法で作成

C:\Program Files\Android\Android Studio\jre\bin\keytool.exe\keytool -genkey -dname "cn=localhost, ou=Example div., o=Example Inc., l=Minato-ku, st=Tokyo, c=JP" -alias jetty -keystore mykeystore.jks -storepass test -keypass test -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -validity 3650 -ext SAN=dns:localhost

「KeyStore Explore」などでキーが正常に作成しているように見えており、file not foundではないので、ファイル自体が見つかっていないようにみえますので、何が問題なのか不明となっています。

補足情報(FW/ツールのバージョンなど)

android studio : 3.6.2
jetty : implementation group: 'org.eclipse.jetty.aggregate', name: 'jetty-all', version: '8.2'
※jetty9はoreo(8.0)以上必須のため、jetty8にしています。
android端末: 8.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Android は JKS をサポートしていませんので、BKS に変換してください。
参考: https://stackoverflow.com/a/24036308/1019868

投稿2020/04/14 23:15

hoshi-takanori

総合スコア7893

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tamago83

2020/04/15 23:55

ありがとうございます。無事作成できました。 併せて、ファイルをBKSにする以外にの変更も行いました。 val sslKey:String = "test.jks" → "test.bks" sslContextFactory.keyStoreType = "JKS" → "BKS" httpsConnector.port = 443 → "44300"
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問