# How do you sign a unsigned modl file

**URL:** <https://forum.inductiveautomation.com/t/how-do-you-sign-a-unsigned-modl-file/37289>\
**Category:** Module Development\
**Created:** [August 2, 2020, 2:15am UTC](https://forum.inductiveautomation.com/t/how-do-you-sign-a-unsigned-modl-file/37289 "2020-08-02T02:15:12Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![joev](https://avatars.discourse-cdn.com/v4/letter/j/b4bc9f/32.png) [@joev](https://forum.inductiveautomation.com/u/joev)\
**Post date:** [August 2, 2020, 2:15am UTC](https://forum.inductiveautomation.com/t/how-do-you-sign-a-unsigned-modl-file/37289/1 "2020-08-02T02:15:12Z")

</div>

I have compiled this file.  
Kafka-Ignition-Module-unsigned.modl  
How the heck do you sign it so I can use it in maker.  
I looked here:

> **[inductiveautomation/module-signer](https://github.com/inductiveautomation/module-signer)**
>
> A utility that signs modules for use in Ignition. Contribute to inductiveautomation/module-signer development by creating an account on GitHub.

and here:  
[https://docs.inductiveautomation.com/display/SE/Module+Signing](https://docs.inductiveautomation.com/display/SE/Module+Signing)  
and here:

> **[IgnitionModuleDevelopmentCommunity/Kafka](https://github.com/IgnitionModuleDevelopmentCommunity/Kafka)**
>
> Kafka extension for Ignition. Contribute to IgnitionModuleDevelopmentCommunity/Kafka development by creating an account on GitHub.

How do you make a self-generated and self-signed code signing certificate.

---

<div class="post-metadata">

**Author:** ![KGarner](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kgarner/32/15999_2.png) [@KGarner](https://forum.inductiveautomation.com/u/KGarner)\
**Post date:** [August 2, 2020, 1:20pm UTC](https://forum.inductiveautomation.com/t/how-do-you-sign-a-unsigned-modl-file/37289/2 "2020-08-02T13:20:14Z")

</div>

This is really 2 topics in one.

1. Generating a certificate
2. Signing a module

Signing a module is relatively straightforward with the tool the IA provides.

Certificates have more to do with security than Ignition. You might want to consult other documentation such as the following:

[https://www.ibm.com/support/knowledgecenter/SSMNED\_5.0.0/com.ibm.apic.cmc.doc/task\_apionprem\_gernerate\_self\_signed\_openSSL.html](https://www.ibm.com/support/knowledgecenter/SSMNED_5.0.0/com.ibm.apic.cmc.doc/task_apionprem_gernerate_self_signed_openSSL.html)

Hope this helps!

---

<div class="post-metadata">

**Author:** ![joev](https://avatars.discourse-cdn.com/v4/letter/j/b4bc9f/32.png) [@joev](https://forum.inductiveautomation.com/u/joev)\
**Post date:** [August 4, 2020, 6:40pm UTC](https://forum.inductiveautomation.com/t/how-do-you-sign-a-unsigned-modl-file/37289/3 "2020-08-04T18:40:04Z")

</div>

I was able to create the signed module.  
But when I go to install in ignition gateway I get this error:  
java.security.cert.CertificateParsingException: signed fields invalid

Hers log that pertains to error:  
java.security.cert.CertificateParsingException: signed fields invalid

at java.base/sun.security.x509.X509CertImpl.parse(Unknown Source)

at java.base/sun.security.x509.X509CertImpl.(Unknown Source)

at java.base/sun.security.provider.X509Factory.parseX509orPKCS7Cert(Unknown Source)

at java.base/sun.security.provider.X509Factory.engineGenerateCertificates(Unknown Source)

at java.base/java.security.cert.CertificateFactory.generateCertificates(Unknown Source)

at com.inductiveautomation.ignition.common.util.SecurityUtils.parseX509Certificates(SecurityUtils.java:244)

at com.inductiveautomation.ignition.common.util.SecurityUtils.parseX509Certificates(SecurityUtils.java:218)

at com.inductiveautomation.ignition.gateway.web.pages.config.ModuleInstallPage.eulaCertCheck(ModuleInstallPage.java:116)

at com.inductiveautomation.ignition.gateway.web.pages.config.ModuleInstallPage$1.onSubmitInternal(ModuleInstallPage.java:71)

at com.inductiveautomation.ignition.gateway.web.components.CsrfPreventingForm.onSubmit(CsrfPreventingForm.java:67)

---

<div class="post-metadata">

**Author:** ![Kevin.McClusky](https://avatars.discourse-cdn.com/v4/letter/k/47e85d/32.png) [@Kevin.McClusky](https://forum.inductiveautomation.com/u/Kevin.McClusky)\
**Post date:** [August 6, 2020, 5:17am UTC](https://forum.inductiveautomation.com/t/how-do-you-sign-a-unsigned-modl-file/37289/4 "2020-08-06T05:17:59Z")

</div>

Check your keystore. That message normally means the certificate / keystore is malformed in some way. Make sure you’re using a Code Signing Certificate and that you’ve properly built your .jks or .pfx that you’re using with module-signer.jar.

You can open your .modl by renaming it to a .zip and looking at your certificates.p7b inside. If you’re running Windows, double clicking it should pull up the info on the certs contained within. If there’s a problem with it, which it seems like there is, I don’t think Windows is likely to be able to open it either.

---

<div class="post-metadata">

**Author:** ![joev](https://avatars.discourse-cdn.com/v4/letter/j/b4bc9f/32.png) [@joev](https://forum.inductiveautomation.com/u/joev)\
**Post date:** [August 6, 2020, 2:53pm UTC](https://forum.inductiveautomation.com/t/how-do-you-sign-a-unsigned-modl-file/37289/5 "2020-08-06T14:53:58Z")

</div>

Does this procedure have to be doe on a windows PC?  
I have been doing all this on Ubuntu machine

---

<div class="post-metadata">

**Author:** ![Kevin.McClusky](https://avatars.discourse-cdn.com/v4/letter/k/47e85d/32.png) [@Kevin.McClusky](https://forum.inductiveautomation.com/u/Kevin.McClusky)\
**Post date:** [August 6, 2020, 3:33pm UTC](https://forum.inductiveautomation.com/t/how-do-you-sign-a-unsigned-modl-file/37289/6 "2020-08-06T15:33:24Z")

</div>

There’s no requirement for Windows. Generating the keystore and running the module-signer.jar on Linux should be fine.
