Skip to content

Instantly share code, notes, and snippets.

@nieldw
Last active September 23, 2020 12:36
Show Gist options
  • Save nieldw/c18d7e35135067284540580d3f43f6ce to your computer and use it in GitHub Desktop.
Save nieldw/c18d7e35135067284540580d3f43f6ce to your computer and use it in GitHub Desktop.
/*
* This Kotlin source file was generated by the Gradle 'init' task.
*/
package old.fashion.java.client
import java.io.File
import java.io.FileInputStream
import java.net.URI
import java.net.http.HttpClient
import java.net.http.HttpRequest
import java.net.http.HttpResponse
import java.security.KeyStore
import java.security.cert.Certificate
import java.security.cert.CertificateFactory
import javax.net.ssl.SSLContext
import javax.net.ssl.TrustManagerFactory
class App {
fun run() {
val keyStore = keyStore()
val trustFactory =
TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm())
trustFactory.init(keyStore)
val sslContext = SSLContext.getInstance("SSL")
sslContext.init(null, trustFactory.trustManagers, null)
val httpClient = HttpClient.newBuilder()
.sslContext(sslContext)
.sslParameters(sslContext.defaultSSLParameters.apply {
serverNames = null
})
.build()
val request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com/hello"))
.GET()
.build()
httpClient.send(request, HttpResponse.BodyHandlers.ofString())
}
private fun keyStore(): KeyStore? {
val crtFile =
File("/home/me/fullcert.pem")
val certificate: Certificate =
CertificateFactory.getInstance("X.509").generateCertificate(FileInputStream(crtFile))
val keyStore = KeyStore.getInstance(KeyStore.getDefaultType())
keyStore.load(null, null)
keyStore.setCertificateEntry("server", certificate)
return keyStore
}
}
fun main(args: Array<String>) {
// System.setProperty("javax.net.debug", "all");
// System.setProperty("jsse.enableSNIExtension", "false")
App().run()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment