# Module Signing Certificate Bundle

**URL:** <https://forum.inductiveautomation.com/t/module-signing-certificate-bundle/45153>\
**Category:** Module Development\
**Created:** [March 31, 2021, 11:40pm UTC](https://forum.inductiveautomation.com/t/module-signing-certificate-bundle/45153 "2021-03-31T23:40:54Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![kgamble](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kgamble/32/8019_2.png) [@kgamble](https://forum.inductiveautomation.com/u/kgamble)\
**Post date:** [March 31, 2021, 11:40pm UTC](https://forum.inductiveautomation.com/t/module-signing-certificate-bundle/45153/1 "2021-03-31T23:40:54Z")

</div>

I am trying to sign a module with a certificate bundle that I have as a .p12 and managed to get it signed but upon installing the module I get the following error:

> **Stack Trace**
>
> ```auto
> 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)
> 
> at org.apache.wicket.markup.html.form.Form$9.component(Form.java:1248)
> 
> at org.apache.wicket.markup.html.form.Form$9.component(Form.java:1242)
> 
> at org.apache.wicket.util.visit.Visits.visitPostOrderHelper(Visits.java:274)
> 
> at org.apache.wicket.util.visit.Visits.visitPostOrder(Visits.java:245)
> 
> at org.apache.wicket.markup.html.form.Form.delegateSubmit(Form.java:1241)
> 
> at org.apache.wicket.markup.html.form.Form.process(Form.java:923)
> 
> at org.apache.wicket.markup.html.form.Form.onFormSubmitted(Form.java:769)
> 
> at org.apache.wicket.markup.html.form.Form.onFormSubmitted(Form.java:702)
> 
> at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 
> at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 
> at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 
> at java.base/java.lang.reflect.Method.invoke(Unknown Source)
> 
> at org.apache.wicket.RequestListenerInterface.internalInvoke(RequestListenerInterface.java:258)
> 
> at org.apache.wicket.RequestListenerInterface.invoke(RequestListenerInterface.java:216)
> 
> at org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.invokeListener(ListenerInterfaceRequestHandler.java:240)
> 
> at org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.respond(ListenerInterfaceRequestHandler.java:226)
> 
> at org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:814)
> 
> at org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64)
> 
> at org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:253)
> 
> at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:210)
> 
> at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:281)
> 
> at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:188)
> 
> at org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:245)
> 
> at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1596)
> 
> at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:545)
> 
> at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
> 
> at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:590)
> 
> at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> 
> at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
> 
> at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1607)
> 
> at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
> 
> at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1297)
> 
> at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
> 
> at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:485)
> 
> at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1577)
> 
> at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
> 
> at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1212)
> 
> at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
> 
> at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> 
> at org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:322)
> 
> at org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:59)
> 
> at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
> 
> at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> 
> at org.eclipse.jetty.server.Server.handle(Server.java:500)
> 
> at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:383)
> 
> at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:547)
> 
> at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375)
> 
> at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:270)
> 
> at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
> 
> at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
> 
> at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117)
> 
> at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)
> 
> at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)
> 
> at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)
> 
> at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)
> 
> at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:388)
> 
> at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806)
> 
> at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:938)
> 
> at java.base/java.lang.Thread.run(Unknown Source)
> 
> ```

I know that the module signing page in the sdk says:  
`1. the full certificate chain, in the correct order, in p7b (PKCS7) format.`

However I am curious is it possible to sign it with a .p12, or is that why I am having the problem?

Thanks,  
Keith

---

<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:** [March 31, 2021, 11:48pm UTC](https://forum.inductiveautomation.com/t/module-signing-certificate-bundle/45153/2 "2021-03-31T23:48:09Z")

</div>

Doesn’t seem like it. This is Java balking at trying to parse a certificate chain out of whatever you provided as `certificates.p7b`.

---

<div class="post-metadata">

**Author:** ![kgamble](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kgamble/32/8019_2.png) [@kgamble](https://forum.inductiveautomation.com/u/kgamble)\
**Post date:** [March 31, 2021, 11:58pm UTC](https://forum.inductiveautomation.com/t/module-signing-certificate-bundle/45153/3 "2021-03-31T23:58:11Z")

</div>

Apple just wants to play difficult with how it exports things! (Wouldn’t let me export as p7b) however opening the keystone I created in Keystore Explorer allowed me to export it as a p7b and all is good to go!
