Hi all,
I have an issue with the Rest API call where I need to provide the certificate (it is the authentication API). I have checked this and other forums, but I can not solve the issue I was able to establish the connection in the Synchronization Editor editor and via Postman, but I have an issue in the VB script where I need this authentication call for some other operations. I tested the same script in my local environment and it worked fine. The version in my environment is 8.1.2, on the customer environment, where I am trying to establish script was version 8.1.1 but after the issue, we have updated it to 8.1.4. .NET version is on both systems 4.7.2, the only difference in the environment is that I have Visual Studio installed on mine (maybe there is a difference in the system dll version?). I am also attaching the code
Public Function CCC_POST_ApiRequestCert(ByVal ThumbPrint As String, ByVal URL As String, ByVal myDataJSON As String, ByVal Action As String) As String
' cert prereq
ServicePointManager.Expect100Continue = True
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls Or SecurityProtocolType.Tls11 Or SecurityProtocolType.Tls12
System.Net.ServicePointManager.ServerCertificateValidationCallback =
Function(se As Object,
cert As System.Security.Cryptography.X509Certificates.X509Certificate,
chain As System.Security.Cryptography.X509Certificates.X509Chain,
sslerror As System.Net.Security.SslPolicyErrors) True
Dim myReq As HttpWebRequest
Dim myResp As HttpWebResponse
Try
myReq = DirectCast(WebRequest.Create(URL), HttpWebRequest)
' GET cert
Dim microcopCert As X509Certificate2 = Nothing
Dim store As New X509Store(StoreName.My, StoreLocation.LocalMachine)
store.Open(OpenFlags.[ReadOnly])
microcopCert = store.Certificates.Find(X509FindType.FindByThumbprint, ThumbPrint, False)(0)
myReq.ClientCertificates.Add(microcopCert)
' request
myReq.Method = "POST"
myReq.ContentType = "application/json"
myReq.Accept = "application/json"
myReq.GetRequestStream.Write(System.Text.Encoding.UTF8.GetBytes(myDataJSON), 0, System.Text.Encoding.UTF8.GetBytes(myDataJSON).Count)
myResp = DirectCast(myReq.GetResponse, HttpWebResponse)
' pares token
For Each cookie As String In myResp.Headers("Set-Cookie").Split({";"}, StringSplitOptions.None)
If cookie.Contains("ss-id") Then
Return cookie.Substring(cookie.IndexOf("=") + 1)
End If
Next
Return String.Empty
Catch ex As WebException
Throw New Exception("Action: " + Action + Environment.NewLine + "Error: " + ex.Message)
Catch ex As Exception
Throw New Exception("Action: " + Action + Environment.NewLine + "Error: " + ex.Message)
End Try
Return String.Empty
End Function