我有一个.crt
和一个.key
文件,我需要将它们用于scala中的TLS连接。 .crt
有多个证书。我尝试使用以下方法将crt
和key
文件合并为jks
文件:
openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt
对于发送请求,我得到了如下内容:
import java.io.FileInputStream
import java.security.KeyStore
val keyPassphrase = "abc123"
val keyStore = KeyStore.getInstance("PKCS12")
keyStore.load(new FileInputStream("client-truststore.jks"), keyPassphrase.toCharArray)
val blockingPool = Executors.newFixedThreadPool(5)
val blocker = Blocker.liftExecutorService(blockingPool)
implicit val contextShift = IO.contextShift(global)
implicit val timer: Timer[IO] = IO.timer(global)
val sslContext = SSLContexts.custom.loadKeyMaterial(keyStore, "abc123".toCharArray).build
val client = BlazeClientBuilder[IO](global, Some(sslContext)).resource
val x = client.use(_.expect[String]("https://example-tls-url.com"))
x.unsafeRunSync
但是证书不起作用。我确定它们是有效的,因为在python中执行了以下操作:
import requests
requests.get('https://url.com', certs=('cert.crt', 'cert.key'))
工作正常,我得到200分。