gpt4 book ai didi

带有 SSL 证书的 Scala https 客户端

转载 作者:太空宇宙 更新时间:2023-11-03 15:10:36 25 4
gpt4 key购买 nike

我想使用 https 协议(protocol)连接到服务器。我有这个网站的自签名证书(.crt 文件)。现在我想使用这个证书连接到这个网站。我目前正在使用客户端 org.apache.http.impl.nio.client,但如果它被证明有用,我准备使用另一个客户端。

如果我有此服务器的 ssl 证书,如何通过 https 连接到服务器?

最佳答案

为了在您的应用程序中仅允许特定证书,您必须遵循以下过程:

1-下载证书

为此,我打开了 firefox,粘贴了我要从中获取证书的网站地址。添加异常(exception)以下载此证书。然后,您可以通过单击地址栏右侧的绿色锁来访问它。屏幕截图将帮助您找到下载方法。

enter image description here

注意下载的是链证书,不是网站的单证书。这是在 ubuntu 的文件资源管理器中选择要导出的文件类型时完成的。

2- 创建一个 java keystore

使用刚刚下载的文件执行此命令:

keytool -import -file file_you_just_downloaded.crt -alias description_of_certificate -keystore /path/toyour/java/jre/lib/security/cacerts
#password by default is: changeit

您现在拥有一个 java keystore ,其中包含使用 https 连接到您的网站所需的所有证书。

3- 使用这些证书创建客户端

这些示例是使用 apache nio 网络客户端制作的。

import java.io.FileInputStream
import java.security.cert.X509Certificate
import java.security.{KeyStore, SecureRandom}
import javax.net.ssl._

import org.apache.http.conn.ssl.NoopHostnameVerifier
import org.apache.http.impl.nio.client.{CloseableHttpAsyncClient, HttpAsyncClients}
import org.apache.commons.io.IOUtils
import org.apache.http.ssl.SSLContexts

def httpClientFactory(
keyStoreFileName: String
): CloseableHttpAsyncClient = {
val httpClientBuilder = HttpAsyncClients.custom()

// activating or not the certificate checking
if (checkCertificate) {
// import keystore
val keyStorePassword = jksPassword // the password you used whit the command keytool
val ks = KeyStore.getInstance(KeyStore.getDefaultType)
val keyStorePath = getClass.getClassLoader.getResource(keyStoreFileName)
val inputStream = new FileInputStream(keyStorePath.getPath)
ks.load(inputStream, keyStorePassword.toArray)
IOUtils.closeQuietly(inputStream)
// create trust manager from keystore
val tmf = TrustManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm)
tmf.init(ks)
val trustManager = tmf.getTrustManagers
// associate trust manager with the httpClient
val sslContext = SSLContext.getInstance("TLS")
sslContext.init(Array(), trustManager, null)
httpClientBuilder.setSSLContext(sslContext)
} else {
logger.warn("Warning ! Https connections will be done without checking certificate. Do not use in production.")
val sslContext = SSLContexts.createDefault()
sslContext.init(null, Array(new X509TrustManager {
override def getAcceptedIssuers: Array[X509Certificate] = Array.empty[X509Certificate]
override def checkClientTrusted(x509Certificates: Array[X509Certificate], s: String): Unit = {}
override def checkServerTrusted(x509Certificates: Array[X509Certificate], s: String): Unit = {}
}), new SecureRandom())
httpClientBuilder.setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE)
.setSSLContext(sslContext)
}

// ending httpClient creation
httpClientBuilder.build()
}

4- 使用 HttpClient

这里没有任何变化。

关于带有 SSL 证书的 Scala https 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40112647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com