Module signing tool

While self signing modules using

java -jar module-signer.jar \
-keystore=/keystore.jks
-keystore-pwd=
-alias=
-alias-pwd=
-chain=/cert.p7b
-module-in=/my-unsigned-module.modl
-module-out=/my-signed-module.modl

as given in the SDK documentation, how to get chain path /cert.p7b? I don’t see any such files in my folder where I created the keypair using the keystore explorer tool ver 5.3.2?

I get error “no RSA PrivateKey found for alias ‘gcm_certificate’.” I am at a loss how to use this tool?

In KeyStore Explorer you can right-click on a key pair entry, Export > Export Certificate Chain. Choose PKCS #7 as the format.

Then give the module-signer utility the path to that p7b file in the -chain parameter.

I did that but get the same error “no RSA PrivateKey found for alias ‘gcm_certificate’.” Please note it says “PrivateKey” not found not the chain path for p7b file.

I did export the private key and public key as well with the same process that you explained for , but still it gives the error! It stores the private key in pkcs8 format. Is that the issue that it expects it to be in pkcs7 format! Is it due to the new version of KeyStore explorer tool? How to export it in pksc7 format? ShouldI use the older version of the tool? Or is there an option in module-signer POM file to accept the PKCS8 format as well?

I have the following files exported from the KeyStore tool in my folder:

19-07-2018 09:20 1,269 gcm_certificate.cer
19-07-2018 01:34 1,088 gcm_certificate.csr
19-07-2018 09:20 2,625 gcm_certificate.p12
19-07-2018 09:51 1,318 gcm_certificate.p7b
19-07-2018 09:33 1,785 gcm_certificate.pkcs8
19-07-2018 09:21 451 gcm_certificate.pub

If it helps to identify the problem.

What’s the full command you’re running (passwords omitted)?

What format did you create your keystore in? None of those other files you exported are needed. You just need the keystore and the chain in PKCS#7 format.

java -jar module-signer-1.0.0-SNAPSHOT-jar-with-dependencies.jar -keystore=C:\Users\imex.keystore -keystore-pwd=********* -alias=gcm_certificate -alias-pwd=********* -chain=C:\Users\imex\gcm_certificate.p7b -module-in=C:\Users\imex\Documents\NetBeansProjects\GCM\GCM-build\target\GCM-Ignition-Module-unsigned.modl -module-out=C:\Users\imex\Documents\NetBeansProjects\GCM\GCM-build\target\GCM-Ignition-Module-signed.modl

I created KeyStore in jks format and exported the certificate chain in PKCS # 7 format.

Looks okay to me. Since I can’t reasonably inspect your KeyStore the only thing I can assume is that the KeyPair inside was not created correctly, or didn’t get created using RSA, or you’re using the wrong alias.

hmm…Let me try some more things on my own. Hopefully I would be able too figure it out soon.

Best Regards

Got it! Its working ! I think the problem was the name for the keystore file which was .keystore by default, which I changed to some some thing else, or it could be case sensitivity of the alias name which was different in the command line than as defined in the editor tool!

Whatever it is , its working fine now!

regards

Now that module signing is working, how to put the Licensing and documentation information in .modl files? Earlier version had an HTML page for documentation & Licensing information.

Also hope self signed modules will suffice for putting in module showcase?

Licensing and documentation hasn’t changed. The module.conf file must have a <Licence> section specifying the file name of the license document, typically license.html, in the root of the .modl file. A <Documentation> section similarly specifies the top level html file of your documentation, or a PDF file. This is assumed to be in a doc folder of your .modl file.

Thanks a lot for the reply.

What about self signed models , are they acceptable in module showcase ?
Kevin McCluskey has also created a module Showcase API project in Ignition which has text section for Module Info and Module License. Where does this info go? Directly on the Module Showcase page?

I am yet to publish information here as well.

The modl file is generated by maven , so where do I keep the license.html and documentation html or pdf file in my project so that maven bundles them in the .modl file?

How are modules to be distributed for evaluation? Do we include the signed .modl files in our downloads?
Does the License Key management have to be done by us using the tool supplied by Ignition on 15/09/2015 for all versions of Ignition, or only for 7.9 and above? Then how licenses are managed for 7.7 & 7.8?

Sorry, I still use ant, so I can build modules that support many versions of Ignition. The only maven project in my dev box is the module-signer tool. /-:

Yes, you must host your signed module downloads and online documentation yourself. You can offer signed modules for eval purposes before you update the showcase, but you have to get the links to your customers yourself. Like with forum links here – that’s how I publish my betas.

Only 7.9+

You nicely ask your sales contact at IA to attach your module license to your customer’s license key. Each and every time.

Thanks a lot Phil. So I will be able to include the self signed modl files in my downloads. I will give you and kyle the first beta before I make them available on gitHub (perhaps by tomorrow) so that you can tell if I have included the right modl files or not.

However the above information (attaching License html file and a bit of documentation) will be a must. request Kevin to throw some light.

Thanks for the other information.

b/r

I got the answer to my previous quest.
Another question, how to find out if our module is Licensed or not. (Like the isFreeModule(), is there any function that returns the Licensed status of our modl?).

I mean a flag to determine whether the License is activated or still its trial version?

LicenseState is passed on startup and later in change events to the module hook. You must implement those methods and save the state when it is delivered.

Even if its available at start up ts fine, we can restrict some of the features if required between Licensed and unlicensed. I hope I can find some documentation on these methods somewhere.

Thanks for the reply.
regards

Is LicenseState the parameter for it in startup function? Where to find the documentation for the Class. The offline version had the complete documentation for the class library. I don’t know where to find it online? Any help will be appreciated.
b/r

http://files.inductiveautomation.com/sdk/javadoc/ignition79/795/com/inductiveautomation/ignition/common/licensing/LicenseState.html

LicenseState values are provided to the GatewayModuleHook on startup and in notifyLicenseStateChanged:
http://files.inductiveautomation.com/sdk/javadoc/ignition79/795/com/inductiveautomation/ignition/gateway/model/GatewayModuleHook.html