This guide assumes your Product Admin has already created a Signer and assigned you to it. If the signer has an approval policy, you’ll also need active access before signing.
jarsigner with the Infisical PKCS#11 module. The module implements the PKCS#11 v2.40 standard, allowing standard signing tools to use Infisical signers without code changes.
Prerequisites
- A Signer created by your Product Admin
- Active signing access (if an approval policy is attached)
- A machine identity added to the Signer
- The Infisical PKCS#11 module installed and configured
- Java JDK 9 or later (for the
-addproviderflag)
Step 1: Set Up Authentication
Configure the Infisical PKCS#11 module with your machine identity credentials. Without this, the signing commands below fail with an auth error. Create/etc/infisical/pkcs11.conf (or set INFISICAL_PKCS11_CONFIG to point elsewhere):
Environment variables override values from the config file.
Step 2: Create the SunPKCS11 Provider Configuration
Create a configuration file for Java’s SunPKCS11 provider. Save it asinfisical-pkcs11.cfg:
On macOS, use the
.dylib extension. On Windows, use .dll.slot parameter:
Step 3: Sign a JAR
Usejarsigner with the PKCS#11 provider to sign your JAR file:
-keystore NONE: Required when using PKCS#11 (no file-based keystore).-storetype PKCS11: Tells jarsigner to use the PKCS#11 provider.-sigalg: Must match the signer’s key type. UseSHA256withRSAfor RSA keys orSHA256withECDSAfor EC keys.- The last argument (
release-signer) is the signer name (the token label in PKCS#11).
clientId:clientSecret.
Verify the Signature
After signing, verify the JAR signature:CI/CD Integration
For automated signing in CI/CD pipelines, use environment variables for credentials and suppress the password prompt:- Use
-storepass ""to avoid the interactive password prompt in non-interactive environments. - Ensure your machine identity has active signing access before the build starts. You can automate access requests via the Infisical API.
Troubleshooting
For any issue, start by enabling debug logging in your config file to get detailed output:CKR_GENERAL_ERROR when signing
CKR_GENERAL_ERROR when signing
This typically means the signing request was denied by the server. Check that you have active signing access for the signer. You can verify this in the Infisical UI by opening the signer’s Approvals tab and looking at the Requests panel.
No slots visible or authentication errors
No slots visible or authentication errors
Verify that your credentials are correct and that the machine identity has been added to the Signer.
What’s Next?
Sign Android APKs
Sign Android applications with apksigner
Sign with OpenSSL
Use OpenSSL with the PKCS#11 module