# How to link AXIS camera to Ignition's SSL accepted/recognized certificates

**URL:** <https://forum.inductiveautomation.com/t/how-to-link-axis-camera-to-ignitions-ssl-accepted-recognized-certificates/85436>\
**Category:** Ignition\
**Tags:** ignition81\
**Created:** [February 8, 2024, 3:24pm UTC](https://forum.inductiveautomation.com/t/how-to-link-axis-camera-to-ignitions-ssl-accepted-recognized-certificates/85436 "2024-02-08T15:24:21Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![Cameron\_Nickle](https://avatars.discourse-cdn.com/v4/letter/c/b3f665/32.png) [@Cameron\_Nickle](https://forum.inductiveautomation.com/u/Cameron_Nickle)\
**Post date:** [February 8, 2024, 3:24pm UTC](https://forum.inductiveautomation.com/t/how-to-link-axis-camera-to-ignitions-ssl-accepted-recognized-certificates/85436/1 "2024-02-08T15:24:21Z")

</div>

Hi all,

I'm currently working on accessing AXIS API calls through the scripting console which works fine if I have HTTPS disabled - obviously this is not ideal.

Currently I've followed 3 sets of instructions - 2 from Ignition and 1 from AXIS - and now cannot seem to get them to link properly.

Instructions:  
[https://docs.inductiveautomation.com/display/DOC81/Security+Certificates](https://docs.inductiveautomation.com/display/DOC81/Security+Certificates)

> **[Requiring SSL Video at Inductive University](https://inductiveuniversity.com/videos/requiring-ssl/8.1)**
>
> Enabling SSL in Ignition will set up secure communications between the Gateway and any of the various Ignition runtimes. Learn more about the Web Server page and how to enable SSL on an Ignition Gateway.

> **[axis-device-manager-https-certificate-management-en-US-112301.pdf](https://www.axis.com/dam/public/c8/f1/73/axis-device-manager-https-certificate-management-en-US-112301.pdf)**
>
> 1156.60 KB

I generated the AXIS root certificate and placed it in the correct location per the instructions on the first and third links.

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/2/4/24a898e26b7a2d30dbeff5514389af93540bbe20.png)

Additionally I enabled SSL via a self-signed certificate on the gateway web-page. The camera ports have been linked to the defaults on the SSL page but will be changed later when I get this working.

I am certain this link can be made, I'm just uncertain as to how to proceed to make this link acceptable to Ignition.

Any insight is greatly appreciated.

Thank you,

Cam

---

<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:** [February 8, 2024, 3:29pm UTC](https://forum.inductiveautomation.com/t/how-to-link-axis-camera-to-ignitions-ssl-accepted-recognized-certificates/85436/2 "2024-02-08T15:29:29Z")

</div>

I'm not sure enabling SSL for Ignition is relevant here.

You added the AXIS root CA to the supplemental certificates, which is good, but are you making/testing your API calls from gateway scope or are you testing in a Client/Designer? Did you restart the Gateway since then?

---

<div class="post-metadata">

**Author:** ![Cameron\_Nickle](https://avatars.discourse-cdn.com/v4/letter/c/b3f665/32.png) [@Cameron\_Nickle](https://forum.inductiveautomation.com/u/Cameron_Nickle)\
**Post date:** [February 8, 2024, 3:43pm UTC](https://forum.inductiveautomation.com/t/how-to-link-axis-camera-to-ignitions-ssl-accepted-recognized-certificates/85436/3 "2024-02-08T15:43:29Z")

</div>

Ohh, I thought I would need to enable SSL.

I'm testing the API calls from the Client/Designer. I have restarted my gateway and all that good stuff.

---

<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:** [February 8, 2024, 3:45pm UTC](https://forum.inductiveautomation.com/t/how-to-link-axis-camera-to-ignitions-ssl-accepted-recognized-certificates/85436/4 "2024-02-08T15:45:56Z")

</div>

> [@Cameron\_Nickle](#):
>
> I'm testing the API calls from the Client/Designer.

You'll have to add the certificates to your Client/Designer machine too: [Launcher Settings - Ignition User Manual 8.1 - Ignition Documentation](https://docs.inductiveautomation.com/display/DOC81/Launcher+Settings#LauncherSettings-AddingSecurityCertificatestoClients)

Or execute the script from the gateway scope instead.

---

<div class="post-metadata">

**Author:** ![Cameron\_Nickle](https://avatars.discourse-cdn.com/v4/letter/c/b3f665/32.png) [@Cameron\_Nickle](https://forum.inductiveautomation.com/u/Cameron_Nickle)\
**Post date:** [February 8, 2024, 4:06pm UTC](https://forum.inductiveautomation.com/t/how-to-link-axis-camera-to-ignitions-ssl-accepted-recognized-certificates/85436/5 "2024-02-08T16:06:33Z")

</div>

It has been added and I restarted my designer but still no dice.

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/0/c/0c5fc28f39ed6f96911927247a6f0b11f6829419.png)

```auto
...
urllib2.URLError: <urlopen error [Errno 1] certificate verify failed (java.security.cert.CertificateException: certificate verify failed)>

```

---

<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:** [February 8, 2024, 4:11pm UTC](https://forum.inductiveautomation.com/t/how-to-link-axis-camera-to-ignitions-ssl-accepted-recognized-certificates/85436/6 "2024-02-08T16:11:02Z")

</div>

Can you share that certificate here?

I also have no idea if the default Java keystore is used when you use the Jython stdlib urrlib functions instead of Ignition's.

---

<div class="post-metadata">

**Author:** ![Cameron\_Nickle](https://avatars.discourse-cdn.com/v4/letter/c/b3f665/32.png) [@Cameron\_Nickle](https://forum.inductiveautomation.com/u/Cameron_Nickle)\
**Post date:** [February 8, 2024, 4:16pm UTC](https://forum.inductiveautomation.com/t/how-to-link-axis-camera-to-ignitions-ssl-accepted-recognized-certificates/85436/7 "2024-02-08T16:16:49Z")

</div>

It wont accept an upload into the post :(. If you let me know more or less what you're looking for I can take a picture of it for you.

Me neither but it was the only option I could make work because the httpClient only accepts basic authentication not digest and AXIS communication is all via digest from what I understand. [Can you access AXIS PTZ controls via Ignition? - #8 by bmusson](https://forum.inductiveautomation.com/t/can-you-access-axis-ptz-controls-via-ignition/85175/8)

---

<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:** [February 8, 2024, 4:20pm UTC](https://forum.inductiveautomation.com/t/how-to-link-axis-camera-to-ignitions-ssl-accepted-recognized-certificates/85436/8 "2024-02-08T16:20:44Z")

</div>

Maybe try something like this just to see if it works:

```python
import urllib2
import ssl

ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

urllib2.urlopen("https://blahblahblahl", context=ctx)

```

---

<div class="post-metadata">

**Author:** ![Cameron\_Nickle](https://avatars.discourse-cdn.com/v4/letter/c/b3f665/32.png) [@Cameron\_Nickle](https://forum.inductiveautomation.com/u/Cameron_Nickle)\
**Post date:** [February 8, 2024, 4:36pm UTC](https://forum.inductiveautomation.com/t/how-to-link-axis-camera-to-ignitions-ssl-accepted-recognized-certificates/85436/9 "2024-02-08T16:36:54Z")

</div>

```auto
import urllib2
import ssl

ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

url = "https://<--myserver-->/axis-cgi/com/ptz.cgi?zoom=1000" #<--myserver--> is just a placeholder im using 
password = urllib2.HTTPPasswordMgrWithDefaultRealm()
password.add_password(None, url, " ***", "***") # *** is also just a place holder im using
handler = urllib2.HTTPDigestAuthHandler(password)
opener = urllib2.build_opener(handler)
response = opener.open(url)

```

I slightly modified the script I was running but I'm not sure where to put the "context = ctx"

---

<div class="post-metadata">

**Author:** ![Chris\_W](https://avatars.discourse-cdn.com/v4/letter/c/c0e974/32.png) [@Chris\_W](https://forum.inductiveautomation.com/u/Chris_W)\
**Post date:** [October 1, 2024, 7:26pm UTC](https://forum.inductiveautomation.com/t/how-to-link-axis-camera-to-ignitions-ssl-accepted-recognized-certificates/85436/10 "2024-10-01T19:26:30Z")

</div>

Was this ever figured out?
