首页 > 解决方案 > 强制 ReactorClientHttpConnector 将 p12 证书与 httpClient 一起使用

问题描述

我使用 spring 云网关,其中 ReactorClientHttpConnector 用于发出 http 请求。http 请求的目的地需要客户端证书。我尝试使用 PostProcessor 设置 HttpClient bean,但没有帮助

override fun postProcessBeforeInitialization(bean: Any, beanName: String): Any? {
        if (bean is HttpClient) {
            val password = System.getProperty("javax.net.ssl.keyStorePassword")
            val appKeyStore: KeyStore = KeyStore.getInstance("PKCS12")
            appKeyStore.load(FileInputStream("/etc/secrets/cert.p12"), password.toCharArray())
            val keyManagerFactory: KeyManagerFactory = KeyManagerFactory.getInstance("SunX509")
            keyManagerFactory.init(appKeyStore, password.toCharArray())
            val sslContextBuilder = SslContextBuilder.forClient()
                .keyManager(keyManagerFactory)
                .trustManager(InsecureTrustManagerFactory.INSTANCE)
                .build();
            return bean.secure { it.sslContext(sslContextBuilder) }
        }
        return super.postProcessBeforeInitialization(bean, beanName)
    }

有没有办法配置 HttpClient,所以所有请求都将使用我的 p12 证书进行?

标签: javaspring-bootkotlinsslreactor-netty

解决方案


推荐阅读