0

Kotlin multiplatform library, my setup looks like the following. Obviously, my JS test fails with the error "Error: Fail to fetch" because the Ktor httpClient(JS) was not configured to ignore/Trust Self Signed certificate. and according to the documentation "Js engine has no custom configuration." so my question is there a way to achieve this to make my test pass JS platforms. or do you know of any workaround? or am I missing something here?

expect object Provider {
    fun createClient(): HttpClient
}

//JVM
actual object Provider {
    actual fun createClient(): HttpClient {
        return HttpClient(Apache) {
            install(JsonFeature) {
                serializer = KotlinxSerializer()
            }
            engine {
                customizeClient {
                    setSSLContext(
                        SSLContextBuilder
                            .create()
                            .loadTrustMaterial(TrustSelfSignedStrategy())
                            .build()
                    )
                    setSSLHostnameVerifier(NoopHostnameVerifier())
                }
            }
        }
    }
}

//JS
actual object Provider {
    actual fun createClient(): HttpClient {
        return HttpClient(Js) {
            install(JsonFeature) {
                serializer = KotlinxSerializer()
            }
        }
    }
}
Ipkiss
  • 721
  • 2
  • 15
  • 27

1 Answers1

1

As a workaround, on the Node.js target, you can set the environment variable NODE_TLS_REJECT_UNAUTHORIZED to disable all certificate verification:

js("process.env.NODE_TLS_REJECT_UNAUTHORIZED = \"0\";")
val client = HttpClient(Js)
client.get<String>("https://localhost:8443/")
Aleksei Tirman
  • 4,658
  • 1
  • 5
  • 24