From 8e8dbf719aab620ca2ae9c1602e73c1ed973d711 Mon Sep 17 00:00:00 2001 From: Alexander Bubenchikov Date: Tue, 2 Jul 2024 14:02:19 +0200 Subject: [PATCH] [maven] IDEA-225239 send maven certificate resolution to IDE side GitOrigin-RevId: dd0b1f044fc195b4f922e313f9028d1ca38d0f78 --- .../server/security/ssl/Multiplexor.java | 8 +- .../ssl/SslIDEConfirmingTrustStore.java | 19 +-- ...stractMavenServerRemoteProcessSupport.java | 13 +- .../ssl/SslDelegateHandlerStateMachine.kt | 160 ++++++++++++++++++ .../messages/MavenProjectBundle.properties | 2 + .../ssl/SslDelegateHandlerStateMachineTest.kt | 46 +++++ .../maven/server/ssl/ssl_remote_query.txt | 61 +++++++ .../ssl/ssl_remote_query_response_error.txt | 4 + .../ssl/ssl_remote_query_response_ok.txt | 4 + 9 files changed, 297 insertions(+), 20 deletions(-) create mode 100644 plugins/maven/src/main/java/org/jetbrains/idea/maven/server/ssl/SslDelegateHandlerStateMachine.kt create mode 100644 plugins/maven/src/test/java/org/jetbrains/idea/maven/server/ssl/SslDelegateHandlerStateMachineTest.kt create mode 100644 plugins/maven/src/test/resources/org/jetbrains/maven/server/ssl/ssl_remote_query.txt create mode 100644 plugins/maven/src/test/resources/org/jetbrains/maven/server/ssl/ssl_remote_query_response_error.txt create mode 100644 plugins/maven/src/test/resources/org/jetbrains/maven/server/ssl/ssl_remote_query_response_ok.txt diff --git a/plugins/maven-server-api/src/main/java/org/jetbrains/idea/maven/server/security/ssl/Multiplexor.java b/plugins/maven-server-api/src/main/java/org/jetbrains/idea/maven/server/security/ssl/Multiplexor.java index 260c187a0ccd..fbdf39043638 100644 --- a/plugins/maven-server-api/src/main/java/org/jetbrains/idea/maven/server/security/ssl/Multiplexor.java +++ b/plugins/maven-server-api/src/main/java/org/jetbrains/idea/maven/server/security/ssl/Multiplexor.java @@ -31,19 +31,13 @@ class Multiplexor { Integer key = Integer.parseInt(line); line = myScanner.nextLine(); if (line.equals(SslIDEConfirmingTrustStore.DELEGATE_RESPONSE_ERROR)) { - line = myScanner.nextLine(); CompletableFuture future = requests.get(key); - if (future != null) future.completeExceptionally(new CertificateException(line)); + if (future != null) future.completeExceptionally(new CertificateException()); } else if (line.equals(SslIDEConfirmingTrustStore.DELEGATE_RESPONSE_OK)) { CompletableFuture future = requests.get(key); if (future != null) future.complete("ok"); } - else { - return; - } - myScanner.nextLine(); - myScanner.nextLine(); } catch (NumberFormatException ignore) { } diff --git a/plugins/maven-server-api/src/main/java/org/jetbrains/idea/maven/server/security/ssl/SslIDEConfirmingTrustStore.java b/plugins/maven-server-api/src/main/java/org/jetbrains/idea/maven/server/security/ssl/SslIDEConfirmingTrustStore.java index 3da1c6a5e2e9..7d712567fcb8 100644 --- a/plugins/maven-server-api/src/main/java/org/jetbrains/idea/maven/server/security/ssl/SslIDEConfirmingTrustStore.java +++ b/plugins/maven-server-api/src/main/java/org/jetbrains/idea/maven/server/security/ssl/SslIDEConfirmingTrustStore.java @@ -1,13 +1,10 @@ // Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.idea.maven.server.security.ssl; -import sun.security.provider.X509Factory; - import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import java.io.ByteArrayOutputStream; -import java.io.OutputStream; import java.io.PrintStream; import java.io.UnsupportedEncodingException; import java.nio.charset.StandardCharsets; @@ -18,7 +15,7 @@ import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import java.util.Base64; -public class SslIDEConfirmingTrustStore { +public final class SslIDEConfirmingTrustStore { public static final String CHECK_CLIENT_TRUSTED = "----------checkClientTrusted----------"; public static final String CHECK_SERVER_TRUSTED = "----------checkServerTrusted----------"; @@ -29,6 +26,8 @@ public class SslIDEConfirmingTrustStore { private static final Multiplexor ourMultiplexor = new Multiplexor(); + public static final String BEGIN_CERTIFICATE = "-----BEGIN CERTIFICATE-----"; + public static final String END_CERTIFICATE = "-----END CERTIFICATE-----"; public static void setup() { try { @@ -56,7 +55,7 @@ public class SslIDEConfirmingTrustStore { } @SuppressWarnings("UseOfSystemOutOrSystemErr") - private void sendAndWaitForResponse(PrintStream out, Integer key) throws CertificateException { + private void sendAndWaitForResponse(String out, Integer key) throws CertificateException { synchronized (this) { System.out.println(out); } @@ -69,7 +68,7 @@ public class SslIDEConfirmingTrustStore { } private void checkTrusted(X509Certificate[] chain, String authType, String methodSignature) throws CertificateException { - OutputStream os = new ByteArrayOutputStream(); + ByteArrayOutputStream os = new ByteArrayOutputStream(); Integer key = ourMultiplexor.getKey(); try (PrintStream out = new PrintStream(os, false, "ISO-8859-1")) { out.println(IDE_DELEGATE_TRUST_MANAGER); @@ -79,21 +78,19 @@ public class SslIDEConfirmingTrustStore { out.println(authType); for (X509Certificate certificate : chain) { - out.println(X509Factory.BEGIN_CERT); + out.println(BEGIN_CERTIFICATE); try { out.println(Base64.getMimeEncoder(80, "\n".getBytes(StandardCharsets.US_ASCII)) .encodeToString(certificate.getEncoded())); - - } catch (CertificateEncodingException e) { out.println("#ERROR: " + e.getMessage()); } - out.println(X509Factory.END_CERT); + out.println(END_CERTIFICATE); } out.println(methodSignature); - sendAndWaitForResponse(out, key); + sendAndWaitForResponse(os.toString("ISO-8859-1"), key); } catch (UnsupportedEncodingException ignore) { throw new CertificateException("Unsupported encoding"); diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/server/AbstractMavenServerRemoteProcessSupport.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/server/AbstractMavenServerRemoteProcessSupport.java index c282eb73656f..5c6cbf76cff0 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/server/AbstractMavenServerRemoteProcessSupport.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/server/AbstractMavenServerRemoteProcessSupport.java @@ -15,6 +15,8 @@ import org.jetbrains.idea.maven.buildtool.MavenImportEventProcessor; import org.jetbrains.idea.maven.execution.MavenSpyEventsBuffer; import org.jetbrains.idea.maven.project.MavenProjectsManager; import org.jetbrains.idea.maven.server.security.TokenReader; +import org.jetbrains.idea.maven.server.ssl.SslDelegateHandlerConfirmingTrustManager; +import org.jetbrains.idea.maven.server.ssl.SslDelegateHandlerStateMachine; import org.jetbrains.idea.maven.utils.MavenLog; import java.io.IOException; @@ -31,6 +33,7 @@ public abstract class AbstractMavenServerRemoteProcessSupport extends MavenRemot @Nullable protected Consumer onTerminate; private final MavenImportEventProcessor myImportEventProcessor; private final MavenSpyEventsBuffer myMavenSpyEventsBuffer; + private final SslDelegateHandlerStateMachine mySslDelegateHandlerStateMachine; public AbstractMavenServerRemoteProcessSupport(@NotNull Sdk jdk, @Nullable String vmOptions, @@ -46,7 +49,12 @@ public abstract class AbstractMavenServerRemoteProcessSupport extends MavenRemot myImportEventProcessor = new MavenImportEventProcessor(project); AnsiEscapeDecoder myDecoder = new AnsiEscapeDecoder(); - myMavenSpyEventsBuffer = new MavenSpyEventsBuffer((l, k) -> myDecoder.escapeText(l, k, myImportEventProcessor)); + mySslDelegateHandlerStateMachine = new SslDelegateHandlerConfirmingTrustManager(); + + myMavenSpyEventsBuffer = new MavenSpyEventsBuffer((l, k) -> { + mySslDelegateHandlerStateMachine.addLine(l); + myDecoder.escapeText(l, k, myImportEventProcessor); + }); } @@ -65,6 +73,7 @@ public abstract class AbstractMavenServerRemoteProcessSupport extends MavenRemot if (handler.getProcessInput() == null) { return; } + mySslDelegateHandlerStateMachine.setOutput(handler.getProcessInput()); OutputStreamWriter writer = new OutputStreamWriter(handler.getProcessInput(), StandardCharsets.UTF_8); try { writer.write(TokenReader.PREFIX + MavenRemoteObjectWrapper.ourToken); @@ -89,7 +98,7 @@ public abstract class AbstractMavenServerRemoteProcessSupport extends MavenRemot if (eventConsumer != null) { eventConsumer.accept(event); } - + if (event.getExitCode() == 0) { return; } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/server/ssl/SslDelegateHandlerStateMachine.kt b/plugins/maven/src/main/java/org/jetbrains/idea/maven/server/ssl/SslDelegateHandlerStateMachine.kt new file mode 100644 index 000000000000..4f79ac4168bf --- /dev/null +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/server/ssl/SslDelegateHandlerStateMachine.kt @@ -0,0 +1,160 @@ +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package org.jetbrains.idea.maven.server.ssl + +import com.intellij.openapi.util.NlsSafe +import com.intellij.util.net.ssl.CertificateManager +import com.intellij.util.net.ssl.ConfirmingTrustManager +import org.jetbrains.idea.maven.project.MavenProjectBundle +import org.jetbrains.idea.maven.server.security.ssl.SslIDEConfirmingTrustStore +import java.io.ByteArrayOutputStream +import java.io.OutputStream +import java.io.PrintStream +import java.security.cert.CertificateException +import java.security.cert.CertificateFactory +import java.security.cert.X509Certificate +import java.util.* + + +class SslDelegateHandlerConfirmingTrustManager : SslDelegateHandlerStateMachine(::confirmServerTrust) + +private fun confirmServerTrust(arr: Array, authType: String): Boolean { + try { + val confirmationParameters = ConfirmingTrustManager.CertificateConfirmationParameters + .askConfirmation(false, + MavenProjectBundle.message("maven.server.ask.trust"), + null) + CertificateManager + .getInstance() + .trustManager + .checkServerTrusted(arr, authType, confirmationParameters) + return true + } + catch (e: CertificateException) { + return false + } +} + + +open class SslDelegateHandlerStateMachine(val checkTrusted: (Array, String) -> Boolean) { + private var currentState: State + lateinit var output: OutputStream + + init { + currentState = Idle(this) + } + + fun addLine(text: @NlsSafe String) { + if (!this::output.isInitialized) return + currentState = currentState.addLine(text.trim('\n', '\r', '\t', ' ')) + } +} + +sealed class State { + abstract fun addLine(text: @NlsSafe String): State +} + +class Idle(val machine: SslDelegateHandlerStateMachine) : State() { + override fun addLine(text: String): State { + if (text == SslIDEConfirmingTrustStore.IDE_DELEGATE_TRUST_MANAGER) return WaitForMethod(machine) + return this + } +} + +class WaitForMethod(val machine: SslDelegateHandlerStateMachine) : State() { + override fun addLine(text: String): State { + if (text == SslIDEConfirmingTrustStore.CHECK_SERVER_TRUSTED) return WaitForKey(machine) + else return Idle(machine) + } +} + +class WaitForKey(val machine: SslDelegateHandlerStateMachine) : State() { + override fun addLine(text: String): State { + val key = text.toIntOrNull() + if (key != null) return WaitForChainLen(machine, key) + return Idle(machine) + } +} + +class WaitForChainLen(val machine: SslDelegateHandlerStateMachine, val key: Int) : State() { + override fun addLine(text: String): State { + val len = text.toIntOrNull() + if (len != null) return WaitForAuthType(machine, key, len) + return Idle(machine) + } + +} + +class WaitForAuthType(val machine: SslDelegateHandlerStateMachine, val key: Int, val len: Int) : State() { + override fun addLine(text: String): State { + return ReadForCertificates(machine, key, len, len, text, ArrayList()) + } + +} + +class ReadForCertificates(val machine: SslDelegateHandlerStateMachine, val key: Int, val len: Int, val toRead: Int, val authType: String, val certificates: ArrayList) : State() { + override fun addLine(text: String): State { + val begin = text + if (begin == SslIDEConfirmingTrustStore.BEGIN_CERTIFICATE) { + return ReadNextCertificate(machine, key, len, toRead, authType, certificates, StringBuilder()) + } + return Idle(machine) + } + + +} + +class ReadNextCertificate( + val machine: SslDelegateHandlerStateMachine, + val key: Int, + val len: Int, + val toRead: Int, + val authType: String, + val certificates: ArrayList, + val stringBuilder: StringBuilder, +) : State() { + override fun addLine(text: String): State { + if (text == SslIDEConfirmingTrustStore.END_CERTIFICATE) { + + val certificateFactory: CertificateFactory = CertificateFactory.getInstance("X.509") + val certificateBuffer: ByteArray = Base64.getMimeDecoder().decode(stringBuilder.toString()) + val certificate: X509Certificate = certificateFactory.generateCertificate(certificateBuffer.inputStream()) as X509Certificate + certificates.add(certificate) + if (toRead == 1) { + return WaitEndAndExecute(machine, key, authType, certificates) + } + else { + return ReadForCertificates(machine, key, len, toRead - 1, authType, certificates) + } + + } + stringBuilder.append(text) + return this + } + +} + +class WaitEndAndExecute(val machine: SslDelegateHandlerStateMachine, val key: Int, val authType: String, val certificates: ArrayList) : State() { + override fun addLine(text: String): State { + if (text == SslIDEConfirmingTrustStore.CHECK_SERVER_TRUSTED) { + val trusted = machine.checkTrusted(certificates.toTypedArray(), authType) + val os = ByteArrayOutputStream() + PrintStream(os, true, "UTF-8").use { ps -> + ps.println(SslIDEConfirmingTrustStore.IDE_DELEGATE_TRUST_MANAGER) + ps.println(SslIDEConfirmingTrustStore.DELEGATE_RESPONSE) + ps.println(key) + if (trusted) { + ps.println(SslIDEConfirmingTrustStore.DELEGATE_RESPONSE_OK) + } + else { + ps.println(SslIDEConfirmingTrustStore.DELEGATE_RESPONSE_ERROR) + } + synchronized(machine) { + machine.output.write(os.toByteArray()) + machine.output.flush() + } + } + } + return Idle(machine) + } + +} diff --git a/plugins/maven/src/main/resources/messages/MavenProjectBundle.properties b/plugins/maven/src/main/resources/messages/MavenProjectBundle.properties index 3389730e181f..3a914b01c954 100644 --- a/plugins/maven/src/main/resources/messages/MavenProjectBundle.properties +++ b/plugins/maven/src/main/resources/messages/MavenProjectBundle.properties @@ -295,3 +295,5 @@ wsl.jdk.downloading=Downloading jdk\u2026 notification.group.maven=Maven maven.project.clean.restart.connectors=Restarting Maven connectors + +maven.server.ask.trust=Maven Server tries to establish SSL connection with the repository diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/server/ssl/SslDelegateHandlerStateMachineTest.kt b/plugins/maven/src/test/java/org/jetbrains/idea/maven/server/ssl/SslDelegateHandlerStateMachineTest.kt new file mode 100644 index 000000000000..e527ffa1f0fa --- /dev/null +++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/server/ssl/SslDelegateHandlerStateMachineTest.kt @@ -0,0 +1,46 @@ +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package org.jetbrains.idea.maven.server.ssl + +import com.intellij.testFramework.UsefulTestCase +import com.intellij.util.ArrayUtilRt +import com.intellij.util.ResourceUtil +import junit.framework.TestCase +import java.io.ByteArrayOutputStream +import java.io.IOException +import java.util.* + +class SslDelegateHandlerStateMachineTest : UsefulTestCase() { + + + fun testResultOk() { + val data = fromFile("ssl_remote_query.txt"); + val machine = SslDelegateHandlerStateMachine { _, _ -> true } + val out = ByteArrayOutputStream() + machine.output = out + data.forEach { machine.addLine(it) } + TestCase.assertEquals(fromFile("ssl_remote_query_response_ok.txt").joinToString(""), out.toString()) + } + + fun testResultFail() { + val data = fromFile("ssl_remote_query.txt"); + val machine = SslDelegateHandlerStateMachine { _, _ -> false } + val out = ByteArrayOutputStream() + machine.output = out + data.forEach { machine.addLine(it) } + TestCase.assertEquals(fromFile("ssl_remote_query_response_error.txt").joinToString(""), out.toString()) + } + + + @Throws(IOException::class) + protected fun fromFile(file: String): Array { + ResourceUtil.getResourceAsStream(SslDelegateHandlerStateMachineTest::class.java.classLoader, "org/jetbrains/maven/server/ssl", file).use { stream -> + Scanner(stream).use { scanner -> + val result: MutableList = ArrayList() + while (scanner.hasNextLine()) { + result.add(scanner.nextLine() + "\n") + } + return ArrayUtilRt.toStringArray(result) + } + } + } +} \ No newline at end of file diff --git a/plugins/maven/src/test/resources/org/jetbrains/maven/server/ssl/ssl_remote_query.txt b/plugins/maven/src/test/resources/org/jetbrains/maven/server/ssl/ssl_remote_query.txt new file mode 100644 index 000000000000..bc08c93a7c35 --- /dev/null +++ b/plugins/maven/src/test/resources/org/jetbrains/maven/server/ssl/ssl_remote_query.txt @@ -0,0 +1,61 @@ +Port:// +blablabla +----------IdeDelegateTrustManager---------- +----------checkServerTrusted---------- +1 +2 +ECDHE_RSA +-----BEGIN CERTIFICATE----- +MIIGazCCBVOgAwIBAgIQAXLAZBooKf1RECf2cHoYsTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJC +RTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTEuMCwGA1UEAxMlR2xvYmFsU2lnbiBBdGxhcyBSMyBE +ViBUTFMgQ0EgMjAyMyBRNDAeFw0yMzEyMTcxNzUxMTRaFw0yNTAxMTcxNzUxMTNaMCAxHjAcBgNVBAMM +FXJlcG8ubWF2ZW4uYXBhY2hlLm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANPmLVYJ +BGGMOeAuuZ07bhuezPK0BZM8ymGvPeQG6dtqMFX+jvGcEOElXFIf1EJlYT8OjUfglhaocC3x4yOIAwpJ +OeKMTtKSp+hN+qrEU0gk9Suny8JmZ6gheTs+p+AomcQTWANXtwEomanUoAaBEHDG/z8zNISygPgkchnZ +wWhTZ9X+2utXNfQTM51G0rnYu0igYIdZ7LRcUoyGU1v2rfSjzJN+maHeXvHcuXCZulaxsw2NP0nHNu57 +IPNxvTr3edxpN6v+3QKxIE61gr0RqSrpS1mCkeqZBO23Wgz2+rC14efTNkFdVJodg4A8ffHtIbemo6RY +Wd3Cdr7WoX3SYqkCAwEAAaOCA2cwggNjMCAGA1UdEQQZMBeCFXJlcG8ubWF2ZW4uYXBhY2hlLm9yZzAO +BgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB0GA1UdDgQWBBQ93URT +65FichWIWGvbb0ze7R/3OjBXBgNVHSAEUDBOMAgGBmeBDAECATBCBgorBgEEAaAyCgEDMDQwMgYIKwYB +BQUHAgEWJmh0dHBzOi8vd3d3Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkvMAwGA1UdEwEB/wQCMAAw +gZ4GCCsGAQUFBwEBBIGRMIGOMEAGCCsGAQUFBzABhjRodHRwOi8vb2NzcC5nbG9iYWxzaWduLmNvbS9j +YS9nc2F0bGFzcjNkdnRsc2NhMjAyM3E0MEoGCCsGAQUFBzAChj5odHRwOi8vc2VjdXJlLmdsb2JhbHNp +Z24uY29tL2NhY2VydC9nc2F0bGFzcjNkdnRsc2NhMjAyM3E0LmNydDAfBgNVHSMEGDAWgBSqEXGPlcRY +mIuxbg87UGgkvLgZvDBIBgNVHR8EQTA/MD2gO6A5hjdodHRwOi8vY3JsLmdsb2JhbHNpZ24uY29tL2Nh +L2dzYXRsYXNyM2R2dGxzY2EyMDIzcTQuY3JsMIIBfAYKKwYBBAHWeQIEAgSCAWwEggFoAWYAdQBOdaMn +XJoQwzhbbNTfP1LrHfDgjhuNacCx+mSxYpo53wAAAYx451JdAAAEAwBGMEQCIBeejHrzGcl7Lrb5L8rh +hOHlQni26PF1aEXfYZZvNFIaAiAj+WJH9iQ/rPI57uHhkw/WwjxmnNY1GpAj2NGfH54k5AB2AD8XS0/X +IkdYlB1lHIS+DRLtkDd/H4Vq68G/KIXs+GRuAAABjHjnUkMAAAQDAEcwRQIhANFI48P8IfmKY+LexiUL +7aV0UUCumQ4eQH0t3W4nnmSXAiBNdz0s6QmJHZiMVUbmBSxMGGhOgXAalRm1fkJ2fuuuoAB1AM8RVu7V +Lnyv84db2Wkum+kacWdKsBfsrAHSW3fOzDsIAAABjHjnUvEAAAQDAEYwRAIgQlPixnbAxCpnRSKQwGV8 +x8+tzGinHCZK4C0ev3Y3mtYCIDsUGpNZWNQloNm7+QPlwtM2uEvebTbG0iYbjh6bQ2cVMA0GCSqGSIb3 +DQEBCwUAA4IBAQCUrFNxKOcxSnxT1tRnETEdGTdSPV13FDH2kOA+14QMftTo0UuXohXTXTSBpFbD+Mir +XzQJ9la1/nIFFoKJxqWd4pXNDy+aJMT+x1023gJX7nsXOls7o4NdoqYlRgjdO1/GResQyq1CE0lnvbb+ +ZXqQrva23HJOM2V3/03EBWhdOr5Ph4jL7ALAuPxiiyrdKgtJ28cYCdu/XDVutVC0QBCoqmcqTkFSr7Up ++2iks65+uLZDOT8Rs6LcuQb6ZPX5mue547OVj7OKR84KKErsEK+XmNOGetRTsIg8N2BH0zWgXqxGU4a+ +IxFE48I7fCNxNCPB/1GMGmU7FoOXyZCK8DOw +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEjzCCA3egAwIBAgIQfx8sScYPx1YvWJnWzWAZszANBgkqhkiG9w0BAQsFADBMMSAwHgYDVQQLExdH +bG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFs +U2lnbjAeFw0yMzA3MTkwMzQyMjlaFw0yNTA3MTkwMDAwMDBaMFgxCzAJBgNVBAYTAkJFMRkwFwYDVQQK +ExBHbG9iYWxTaWduIG52LXNhMS4wLAYDVQQDEyVHbG9iYWxTaWduIEF0bGFzIFIzIERWIFRMUyBDQSAy +MDIzIFE0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArn7MODS0pNF1+r3pMVMb8tjOcHZE +zqIqk+OU738JzxqkKKO6o4eMdPQn3wuKPHQKmJFEiMwYRYlPzFqL5SJVfmDg2t47QPtrL5kPr/bU08qL +0N3LDeuv4d7c5FmY535/3AqlZqcnp9EFSHngn4ISG6EXp6s/LPdyObu6so4vApJbmm2xHHc1pgAeorBN +sDRr9IgcODwI1U5o3UtBP0F4oZFmIopTl1dbFKGYPr+xap3hAw+z5MnspBaDRkSiU3xfy0LngS73Vs52 +eYdp11AEWlZzTyDYwc8zm/tRArLZzfqygl86AyydLvZ9tg8OzPx+Tzl5xLx5LtwiKsxglnv2ewIDAQAB +o4IBXzCCAVswDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjASBgNV +HRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSqEXGPlcRYmIuxbg87UGgkvLgZvDAfBgNVHSMEGDAWgBSP +8Et/qC5FJK5NUPpjmove4t0bvDB7BggrBgEFBQcBAQRvMG0wLgYIKwYBBQUHMAGGImh0dHA6Ly9vY3Nw +Mi5nbG9iYWxzaWduLmNvbS9yb290cjMwOwYIKwYBBQUHMAKGL2h0dHA6Ly9zZWN1cmUuZ2xvYmFsc2ln +bi5jb20vY2FjZXJ0L3Jvb3QtcjMuY3J0MDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwuZ2xvYmFs +c2lnbi5jb20vcm9vdC1yMy5jcmwwIQYDVR0gBBowGDAIBgZngQwBAgEwDAYKKwYBBAGgMgoBAzANBgkq +hkiG9w0BAQsFAAOCAQEAiLoUIGIiKDNmQ8cWRZv5BX3ChPqWie23uWZ1YaP/59gYVvM48TbQu7lA8ZeE +FieIUFE+B68wGtU4mxKamfkWhORTAl1OcQ2C2tfJ0t4v6TbtEgzS2CC7oDkr4+W5QDuBbGgNIzBB7xbL +9Uy/PJ602MFt46a8WYvr0Mp+Qn2buHQ8WaTi2PXiv8Z62YZ0zz3yEpWzh7sVUS/4t6CdvccPnYq6c0wM +IO4Dn+fO5HEy3M00y9BIXhG4WeMWhmIkes+tp6LilOYT/ZV2WPebhvmi66VnDzRPwk98aWrMYzkV3pgk +wLQIqzfp1N3gNAHeZCnzaCq5VstgX6g9l2vw5Qycag== +-----END CERTIFICATE----- +----------checkServerTrusted---------- +someshit \ No newline at end of file diff --git a/plugins/maven/src/test/resources/org/jetbrains/maven/server/ssl/ssl_remote_query_response_error.txt b/plugins/maven/src/test/resources/org/jetbrains/maven/server/ssl/ssl_remote_query_response_error.txt new file mode 100644 index 000000000000..43c2a1f579db --- /dev/null +++ b/plugins/maven/src/test/resources/org/jetbrains/maven/server/ssl/ssl_remote_query_response_error.txt @@ -0,0 +1,4 @@ +----------IdeDelegateTrustManager---------- +----------RESPONSE---------- +1 +----------ERROR---------- diff --git a/plugins/maven/src/test/resources/org/jetbrains/maven/server/ssl/ssl_remote_query_response_ok.txt b/plugins/maven/src/test/resources/org/jetbrains/maven/server/ssl/ssl_remote_query_response_ok.txt new file mode 100644 index 000000000000..9e3ef49c498d --- /dev/null +++ b/plugins/maven/src/test/resources/org/jetbrains/maven/server/ssl/ssl_remote_query_response_ok.txt @@ -0,0 +1,4 @@ +----------IdeDelegateTrustManager---------- +----------RESPONSE---------- +1 +----------OK----------