在 ktor httpClient(js) JS 引擎中忽略自签名证书的配置

Posted

技术标签:

【中文标题】在 ktor httpClient(js) JS 引擎中忽略自签名证书的配置【英文标题】:configuration to Ignore self-signed certificate in ktor httpClient(js) JS engine 【发布时间】:2021-06-01 04:46:15 【问题描述】:

Kotlin 多平台库,我的设置如下所示。 显然,我的 JS 测试因错误“错误:无法获取”而失败,因为 Ktor httpClient(JS) 未配置为忽略/信任自签名证书。并根据documentation“Js 引擎没有自定义配置”。 所以我的问题是有没有办法让我的测试通过 JS 平台。 或者您知道任何解决方法吗?还是我在这里遗漏了什么?

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()
            
        
    

【问题讨论】:

【参考方案1】:

作为一种解决方法,在 Node.js 目标上,您可以设置环境变量 NODE_TLS_REJECT_UNAUTHORIZED 以禁用所有证书验证:

js("process.env.NODE_TLS_REJECT_UNAUTHORIZED = \"0\";")
val client = HttpClient(Js)
client.get<String>("https://localhost:8443/")

【讨论】:

以上是关于在 ktor httpClient(js) JS 引擎中忽略自签名证书的配置的主要内容,如果未能解决你的问题,请参考以下文章

无法在 kotlin js 中使用 ktor 客户端发布请求

克托尔。无法在 kotlin-js 端创建 Httpclient 的实例

Ktor HttpClient 在 runBlocking 中挂起

如何在 Multiplatform Ktor 和 Coil 之间共享 HttpClient?

Ktor 的 HttpClient 使用的正确模式

如何使用针对 linuxX64 的 ktor-client-core 修复“未解决的参考:HttpClient”