Created
March 26, 2025 17:16
-
-
Save dzmitry-savitski/3dcda83b470b7ceaf1efaabd6d66ce4f to your computer and use it in GitHub Desktop.
Revisions
-
dzmitry-savitski created this gist
Mar 26, 2025 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,54 @@ import javax.net.ssl.* import java.security.KeyStore import java.io.* import java.net.URL // --- Configuration --- def apiUrl = "https://<pvwa-url>/AIMWebService/api/Accounts" def appId = "MyAppID" def safe = "MySafe" def objectName = "MyAccount" def pkcs12Path = "/path/to/client.p12" def pkcs12Password = "your_cert_password" // --- Load client certificate into KeyStore --- KeyStore keyStore = KeyStore.getInstance("PKCS12") keyStore.load(new FileInputStream(pkcs12Path), pkcs12Password.toCharArray()) KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509") kmf.init(keyStore, pkcs12Password.toCharArray()) SSLContext sslContext = SSLContext.getInstance("TLS") sslContext.init(kmf.getKeyManagers(), null, new SecureRandom()) // --- Build the full request URL with query params --- def query = "AppID=${URLEncoder.encode(appId, 'UTF-8')}" + "&Safe=${URLEncoder.encode(safe, 'UTF-8')}" + "&Object=${URLEncoder.encode(objectName, 'UTF-8')}" def fullUrl = new URL("${apiUrl}?${query}") def connection = (HttpsURLConnection) fullUrl.openConnection() // --- Apply SSL context (with client cert) --- connection.setSSLSocketFactory(sslContext.getSocketFactory()) // Optional: disable hostname verification (only for testing!) connection.setHostnameVerifier({ hostname, session -> true }) connection.setRequestMethod("GET") connection.setRequestProperty("Accept", "application/json") // --- Read the response --- def responseCode = connection.responseCode if (responseCode == 200) { def reader = new BufferedReader(new InputStreamReader(connection.getInputStream())) def response = reader.lines().join("\n") println "🔐 Response from CyberArk:" println response } else { def errorReader = new BufferedReader(new InputStreamReader(connection.getErrorStream())) def errorMsg = errorReader.lines().join("\n") println "❌ Request failed with code ${responseCode}" println errorMsg }