I am trying to do POC on SoftHSM 2 , but some how I am getting below issue .
Exception in thread "main" java.security.ProviderException: Initialization failed at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:376) at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:103) at SoftHSM.main(SoftHSM.java:50) Caused by: sun.security.pkcs11.wrapper.PKCS11Exception: CKR_SLOT_ID_INVALID at sun.security.pkcs11.wrapper.PKCS11.C_GetSlotInfo(Native Method) at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:365) ... 2 more
HSM Config File :
# SoftHSM v2 configuration file name= SoftHSM2 library = C:\SoftHSM2\lib\softhsm2-x64.dll slot=1
If I comment slot=1 , then I am getting
Exception in thread "main" java.security.ProviderException: Initialization failed at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:376) at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:103) at SoftHSM.main(SoftHSM.java:50) Caused by: sun.security.pkcs11.wrapper.PKCS11Exception: CKR_TOKEN_NOT_RECOGNIZED at sun.security.pkcs11.wrapper.PKCS11.C_OpenSession(Native Method) at sun.security.pkcs11.SessionManager.openSession(SessionManager.java:215) at sun.security.pkcs11.SessionManager.getOpSession(SessionManager.java:150) at sun.security.pkcs11.Token.<init>(Token.java:151) at sun.security.pkcs11.SunPKCS11.initToken(SunPKCS11.java:858) at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:367) ... 2 more
due to some reason it is not getting intizlized. Does anybody can help me on get it running with Java .
My PC Details : Winn 10: 64 bit I have added VC++ distributaable as per requirement from softHSM.
I am attaching my java Source file
import java.security.Key; import java.security.KeyStore; import java.security.Provider; import java.security.Security; import javax.crypto.spec.SecretKeySpec; import sun.security.pkcs11.SunPKCS11; public class TestClass { public static void main(String[] args) throws Exception { // Set up the Sun PKCS 11 provider // String configName = "Z:\\SOFTHSM_INSTALL\\etc\\softhsm2.conf"; String configName = "softhsm2.cfg"; Provider p = new SunPKCS11(configName); if (-1 == Security.addProvider(p)) { throw new RuntimeException("could not add security provider"); } // Load the key store char[] pin = "mypin".toCharArray(); KeyStore keyStore = KeyStore.getInstance("PKCS11", p); keyStore.load(null, pin); // AES key SecretKeySpec secretKeySpec = new SecretKeySpec("0123456789ABCDEF".getBytes(), "AES"); Key key = new SecretKeySpec(secretKeySpec.getEncoded(), "AES"); keyStore.setKeyEntry("AA", key, "1234".toCharArray(), null); keyStore.store(null); //this gives me the exception. } }
Please help me guys.
Seems to be I dont have any slots with token initialized. So trying to initialize the token. but getting below error. Can someone help me to identify mistake I did.
C:\SoftHSM2\bin>softhsm2-util.exe --show-slots Available slots: Slot 0 Slot info: Description: SoftHSM slot ID 0x0 Manufacturer ID: SoftHSM project Hardware version: 2.2 Firmware version: 2.2 Token present: yes Token info: Manufacturer ID: SoftHSM project Model: SoftHSM v2 Hardware version: 2.2 Firmware version: 2.2 Serial number: Initialized: no User PIN init.: no Label: C:\SoftHSM2\bin>softhsm2-util.exe --init-token --slot 0 --label Kumar === SO PIN (4-255 characters) === Please enter SO PIN: **** Please reenter SO PIN: **** === User PIN (4-255 characters) === Please enter user PIN: **** Please reenter user PIN: **** ERROR 30: Could not initialize the token.
Solution:
I verified Windows Event Log as per Jariq, it says application corrupted. I did re-install the app for windows "softhsm2.msi".
and executed script is below here for Reference to people like me .
Microsoft Windows [Version 10.0.14393] (c) 2016 Microsoft Corporation. All rights reserved. C:\WINDOWS\system32>cd\ C:\>cd SoftHSM2 C:\SoftHSM2>cd bin C:\SoftHSM2\bin>softhsm2-util.exe --init-token --slot 0 --label "My token 1" === SO PIN (4-255 characters) === Please enter SO PIN: ERROR: The length of the PIN is out of range. === SO PIN (4-255 characters) === ^C C:\SoftHSM2\bin>softhsm2-util.exe --init-token --slot 0 --label "My token 1" === SO PIN (4-255 characters) === Please enter SO PIN: **** Please reenter SO PIN: **** === User PIN (4-255 characters) === Please enter user PIN: **** Please reenter user PIN: **** CKR_SLOT_ID_INVALID: Slot 0 does not exist. C:\SoftHSM2\bin>softhsm2-util.exe --show-slots Available slots: Slot 1526831955 Slot info: Description: SoftHSM slot ID 0x5b019b53 Manufacturer ID: SoftHSM project Hardware version: 2.2 Firmware version: 2.2 Token present: yes Token info: Manufacturer ID: SoftHSM project Model: SoftHSM v2 Hardware version: 2.2 Firmware version: 2.2 Serial number: cafa9efc5b019b53 Initialized: yes User PIN init.: yes Label: 0 token Slot 1 Slot info: Description: SoftHSM slot ID 0x1 Manufacturer ID: SoftHSM project Hardware version: 2.2 Firmware version: 2.2 Token present: yes Token info: Manufacturer ID: SoftHSM project Model: SoftHSM v2 Hardware version: 2.2 Firmware version: 2.2 Serial number: Initialized: no User PIN init.: no Label: C:\SoftHSM2\bin>softhsm2-util.exe --init-token --slot 1 --label "My token 1" === SO PIN (4-255 characters) === Please enter SO PIN: **** Please reenter SO PIN: **** === User PIN (4-255 characters) === Please enter user PIN: **** Please reenter user PIN: **** The token has been initialized. C:\SoftHSM2\bin>softhsm2-util.exe --show-slots Available slots: Slot 1242738572 Slot info: Description: SoftHSM slot ID 0x4a12af8c Manufacturer ID: SoftHSM project Hardware version: 2.2 Firmware version: 2.2 Token present: yes Token info: Manufacturer ID: SoftHSM project Model: SoftHSM v2 Hardware version: 2.2 Firmware version: 2.2 Serial number: 00fbfb20ca12af8c Initialized: yes User PIN init.: yes Label: My token 1 Slot 1526831955 Slot info: Description: SoftHSM slot ID 0x5b019b53 Manufacturer ID: SoftHSM project Hardware version: 2.2 Firmware version: 2.2 Token present: yes Token info: Manufacturer ID: SoftHSM project Model: SoftHSM v2 Hardware version: 2.2 Firmware version: 2.2 Serial number: cafa9efc5b019b53 Initialized: yes User PIN init.: yes Label: 0 token Slot 2 Slot info: Description: SoftHSM slot ID 0x2 Manufacturer ID: SoftHSM project Hardware version: 2.2 Firmware version: 2.2 Token present: yes Token info: Manufacturer ID: SoftHSM project Model: SoftHSM v2 Hardware version: 2.2 Firmware version: 2.2 Serial number: Initialized: no User PIN init.: no Label: C:\SoftHSM2\bin>softhsm2-util.exe --init-token --slot 2 --label "My token 2" === SO PIN (4-255 characters) === Please enter SO PIN: **** Please reenter SO PIN: **** === User PIN (4-255 characters) === Please enter user PIN: **** Please reenter user PIN: **** The token has been initialized. C:\SoftHSM2\bin>
After this I have more than one token initialized . Thanks you verymuch Jariq.