# POST request using client SSL Certificate

**URL:** <https://forum.inductiveautomation.com/t/post-request-using-client-ssl-certificate/12551>\
**Category:** Ignition\
**Created:** [January 12, 2017, 12:01am UTC](https://forum.inductiveautomation.com/t/post-request-using-client-ssl-certificate/12551 "2017-01-12T00:01:31Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Jonathan](https://avatars.discourse-cdn.com/v4/letter/j/aeb1de/32.png) [@Jonathan](https://forum.inductiveautomation.com/u/Jonathan)\
**Post date:** [January 12, 2017, 12:01am UTC](https://forum.inductiveautomation.com/t/post-request-using-client-ssl-certificate/12551/1 "2017-01-12T00:01:31Z")

</div>

I am trying to connect to PG&E through their share my data program. They require the client to connect to their web service using a SSL Certificate.

I cannot figure out how to use system.net.httpPost with the keystore file I have.

Any help would be appreciated.

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [January 12, 2017, 12:18am UTC](https://forum.inductiveautomation.com/t/post-request-using-client-ssl-certificate/12551/2 "2017-01-12T00:18:05Z")

</div>

You’re going to have to do this using Java classes/library instead of system.net.httpPost()

This Stack Overflow post should get you going: [stackoverflow.com/questions/3734 … entication](http://stackoverflow.com/questions/3734613/how-to-request-a-url-that-requires-a-client-certificate-for-authentication)

---

<div class="post-metadata">

**Author:** ![Jonathan](https://avatars.discourse-cdn.com/v4/letter/j/aeb1de/32.png) [@Jonathan](https://forum.inductiveautomation.com/u/Jonathan)\
**Post date:** [January 12, 2017, 12:48am UTC](https://forum.inductiveautomation.com/t/post-request-using-client-ssl-certificate/12551/3 "2017-01-12T00:48:21Z")

</div>

is Apache HTTP Client available in Ignition?

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [January 12, 2017, 12:53am UTC](https://forum.inductiveautomation.com/t/post-request-using-client-ssl-certificate/12551/4 "2017-01-12T00:53:22Z")

</div>

No, but you can add it with a module if you want. You’d be able to create your own HTTP scripting functions that way too.

The built-in scripting functions all use HttpURLConnection underneath.

---

<div class="post-metadata">

**Author:** ![Jonathan](https://avatars.discourse-cdn.com/v4/letter/j/aeb1de/32.png) [@Jonathan](https://forum.inductiveautomation.com/u/Jonathan)\
**Post date:** [January 12, 2017, 4:44pm UTC](https://forum.inductiveautomation.com/t/post-request-using-client-ssl-certificate/12551/5 "2017-01-12T16:44:42Z")

</div>

out of curiosity what library is being used in the function system.net.httpPost?

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [January 12, 2017, 5:04pm UTC](https://forum.inductiveautomation.com/t/post-request-using-client-ssl-certificate/12551/6 "2017-01-12T17:04:49Z")

</div>

[quote=“Kevin.Herron”]  
The built-in scripting functions all use HttpURLConnection underneath.[/quote]

😃

---

<div class="post-metadata">

**Author:** ![Jonathan](https://avatars.discourse-cdn.com/v4/letter/j/aeb1de/32.png) [@Jonathan](https://forum.inductiveautomation.com/u/Jonathan)\
**Post date:** [January 13, 2017, 6:41pm UTC](https://forum.inductiveautomation.com/t/post-request-using-client-ssl-certificate/12551/7 "2017-01-13T18:41:59Z")

</div>

I figured how to do this with the libraries already available in java using HttpsURLConnection

[code]from [java.net](http://java.net) import URL  
from java.security import KeyStore  
from [java.io](http://java.io) import FileInputStream  
from javax.net.ssl import SSLContext  
from javax.net.ssl import SSLSocketFactory  
from [java.io](http://java.io) import BufferedReader  
from [java.io](http://java.io) import InputStreamReader  
from [java.io](http://java.io) import OutputStreamWriter  
from java.lang import String  
from javax.net.ssl import KeyManagerFactory

ksCACert = KeyStore.getInstance(KeyStore.getDefaultType())  
password = String(“Put Your Keystore Password HERE”)  
ksCACert.load(FileInputStream(“Put your file path to your .jks Keystore file HERE”), password.toCharArray())

kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm())  
kmf.init(ksCACert, password.toCharArray())

context = SSLContext.getInstance(“TLS”)  
context.init(kmf.getKeyManagers(), None, None)  
sslSocketFactory = context.getSocketFactory()

url = URL(“[https://URL](https://URL) your are trying to access HERE”)  
urlConnection = url.openConnection()  
urlConnection.setDoOutput(1)  
urlConnection.setDoInput(1)  
urlConnection.setUseCaches(0)

urlConnection.setSSLSocketFactory(sslSocketFactory)  
#THIS IS WHERE YOU ADD HEADER INFORMATION  
#may be different headers for you application  
urlConnection.setRequestProperty(“Authorization”,“Put access code here”)  
urlConnection.setRequestProperty(“Content-Type”, “application/x-www-form-urlencoded”)  
urlConnection.setRequestMethod(“POST”)

#this is where parameters go  
#may not need this for your application  
urlParameters = String(“param1=paraminput”)  
os = urlConnection.getOutputStream()  
osw = OutputStreamWriter(os)  
osw.write(urlParameters)  
osw.flush()  
osw.close()  
os.close()

urlConnection.connect()

responseCode = urlConnection.getResponseCode()  
print "Sending ‘POST’ request to URL : " , url  
print "Post parameters : " , urlParameters  
print "Response Code : " , responseCode

isr = InputStreamReader(urlConnection.getInputStream())

br = BufferedReader(isr)

line = br.readLine()  
while(line != None):  
print line  
line = br.readLine()

br.close()[/code]
