先决条件
本指南假定您已经:
已将证书提取到token中。
已安装 Java JDK。
可能需要管理权限,具体取决于设置为 Java JDK bin 文件夹的权限。
Signature Setup 签名设置
1、为了使 JDK 能够访问安全令牌,您首先需要创建一个配置文件。打开任何纯文本编辑器并创建名为 eToken.cfg 的文件。该文件应包含 2 行,可能为 3 行:
name=eToken library=c:\WINDOWS\system32\eTPKCS11.dll slot=3
注意:现在提供的默认token是 eToken 5110。如果未指定,则默认插槽编号为 0。SafeNet eToken 5110 将自动分配给插槽 0,因此 .cfg 文件中不需要插槽行。但是,这可能需要根据安装的 eToken/SmartCard 读卡器的数量进行更改。SafeNet Ikey 4000 的默认插槽编号为插槽 3。使用 SafeNet iKey 4000 时,将需要插槽线。
2、将此文件保存在 JDK bin 文件夹中,默认情况下为:
C:\Program Files (x86)\Java\jdk1.7.0_67\bin
3、打开命令提示符:Start > Run > cmd
4、导航到您的 Java JDK Bin 文件夹:
cd C:\Program Files (x86)\Java\jdk1.7.0_67\bin
5、为了使用令牌进行签名,您需要找到私钥的别名。这将使您能够在签名时引用正确的证书。从 bin 文件夹运行以下命令:
keytool -list -keystore NONE -storetype PKCS11 -providerclass sun.security.pkcs11.SunPKCS11 -providerArg eToken.cfg
输入密钥库密码:“Your Token Password”
如果出现“Error Note: If you receive the following error: “java.security.KeyStoreException: PKCS11 not found” at this point. There are 2 potential issues with the configuration:”错误:
指定的插槽编号不是正确的插槽。要找到合适的插槽,请在 eToken.cfg 文件中将插槽编号设置为零 (slot=0)。尝试再次运行 list 命令,每次迭代错误时,插槽编号都会增加 1。您最终应该会收到 Enter KeyStore Password 提示,该提示将接受您的 SafeNet 令牌密码。*请参阅:签名设置步骤 1。
SafeNet 驱动程序未正确安装。确保安装了正确的驱动程序。
6、输出由密钥别名、密钥类型和证书指纹组成。我们需要 代码签名证书的别名来实际签署文件。
le-d0e453de-66db-414a-8fa8-0a07cfad66b5, PrivateKeyEntry, Certificate fingerprint (SHA1): 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
7、如果您的令牌上有多个证书,您可能需要辨别我们将使用哪个证书。打开 Safenet 身份验证客户端,按顶部的齿轮图标:
8、找到已安装的 GlobalSign EV 代码签名证书,然后双击它。这将提取 Certificate 详细信息。选择 Details (详细信息) 选项卡,滚动到底部,Thumbprint (指纹) 将出现在那里:
9、将 Certificate thumbprint 与输出上的正确别名匹配。在本例中,它将是第一个条目:
le-d0e453de-66db-414a-8fa8-0a07cfad66b5, PrivateKeyEntry, Certificate fingerprint (SHA1): 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
10、复制别名(例如 le-d0e453de-66db-414a-8fa8-0a07cfad66b5)以便在下一个命令中使用。
Signing a .Jar File 签署 .Jar 文件
1、现在我们已经成功访问了令牌并收到了我们的 Certificates 别名,我们可以对 .jar 文件进行签名。您需要将要签名的 .jar 文件放入 bin 目录中。
2、在命令行中,导航到 Java SDK bin 目录(例如 C:\Program Files (x86)\Java\jdk1.7.0_67\bin)
用于签名的命令是:
jarsigner -keystore NONE -storetype PKCS11 -tsa http://timestamp.globalsign.com/tsa/r6advanced1 -providerClass sun.security.pkcs11.SunPKCS11 -providerArg eToken.cfg test.jar "le-d0e453de-66db-414a-8fa8-0a07cfad66b5"
注意:为您的代码添加时间戳非常重要,强烈建议您签署的每一段代码都使用时间戳。此时间戳将允许您签名的文件在 Certificate 本身过期后很长一段时间内保持有效。