使用Jsign在Linux中进行Microsoft Authenticode代码签名

如何在Linux系统上使用Jsign进行Windows Authenticode代码签名,包括标准OV / IV和基于令牌的EV证书。

相关内容

想继续学习吗?

订阅 SSL.com 的新闻通讯,随时了解最新信息并获得安全保障。

标志 是用于Microsoft Authenticode代码签名的开源,独立于平台的Java工具。 Jsign易于与Maven,Gradle和Ant之类的构建系统集成,或者可以直接在命令行中使用。

在本操作方法中,我们将介绍使用 标志 从Linux命令行 OV / IV代码签名EV代码签名。 由于Jsign基于Java,因此您也可以在Windows和MacOS系统上使用它。

安装Jsign

首先,您必须下载并安装Jsign。 的 Jsign网站 包括指向Debian和RPM软件包的链接,以便在大多数流行的Linux系统上轻松安装,以及 .jar 文件中。

OV / IV代码签名

本部分仅适用于 1 年 2023 月 XNUMX 日之前订购的个人验证 (IV) 和组织验证 (OV) 代码签名证书。 从1年2023月XNUMX日开始,SSL.com 的 IV 和 OV 代码签名证书已开始通过联邦信息处理标准 140-2 (FIPS 140-2) USB 令牌或通过我们的 eSigner 云代码签名服务颁发。 

对于 OV/IV 代码签名,您可以使用存储在 Java 密钥库或 PKCS#12 (PFX) 文件中的证书。 在下面的所有代码示例中,将全部大写的值替换为您的实际值。

  1. 首先,使用 keytool 命令获取 alias 签名时使用的值:
    keytool-列表-v -keystore PKCS12-FILE.p12 -storetype PKCS12 -storepass PKCS12-PASSWORD
  2. 检查您的输出 keytool 以开头的行的命令 Alias name:.
    密钥库类型:PKCS12密钥库提供者:SUN您的密钥库包含1个条目别名:1创建日期:18年2021月4日条目类型:PrivateKeyEntry证书链长度:XNUMX ...

    在上面的示例中, Alias name is 1.

  3. 使用如下命令对文件签名并加时间戳:
    • jsign 系统范围内安装的命令:
      jsign --keystore KEYSTORE.p12-别名别名--storetype PKCS12 --storepass PKCS12-PASSWORD --tsaurl http://ts.ssl.com --tsmode RFC3161文件到签名
    • 与Jsigner .jar 文件:
      java -jar jsign-3.1.jar --keystore KEYSTORE.p12 --alias别名--storetype PKCS12 --storepass PKCS12-PASSWORD --tsaurl http://ts.ssl.com --tsmode RFC3161 FILE-TO-标志
  4. 如果命令成功执行,则应该看到如下输出:
    将Authenticode签名添加到example.exe
请注意: 默认情况下,SSL.com 支持来自 ECDSA 密钥的时间戳。

如果您遇到此错误: The timestamp certificate does not meet a minimum public key length requirement,您应该联系您的软件供应商以允许来自 ECDSA 密钥的时间戳。

如果您的软件供应商无法允许使用普通端点,您可以使用此旧版端点 http://ts.ssl.com/legacy 从 RSA 时间戳单元获取时间戳。

EV代码签名

您还可以将Jsign与EV代码签名证书一起使用。 此处的示例使用SSL.com EV代码签名证书 安装在 FIPS 140-2 验证的安全密钥 USB 令牌.

  1. 首先,请确保 OpenSC 已安装在您的系统上,因此它可以通过PKCS#11 API与您的令牌通信。 在基于Debian的发行版(如Ubuntu)上,您可以使用以下命令安装OpenSC: apt:
    sudo apt安装opensc
  2. 接下来,创建一个配置文件。 文件名是任意的,但是对于下面的示例命令,我们将使用 eToken.cfg。 请注意, opensc-pkcs11.so 可能在您的OpenSC安装中会有所不同,因此请在创建配置文件之前进行检查。
    名称= OpenSC-PKCS11描述=通过OpenSC库的SunPKCS11 = /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so slotListIndex = 0
  3. 使用 keytool 命令获取 alias 签名时使用的值:
    keytool-列表-v -keystore无-storetype PKCS11 -storepass令牌-providerClass sun.security.pkcs11.SunPKCS11 -providerArg eToken.cfg
  4. 检查您的输出 keytool 以开头的行的命令 Alias name:。 如果令牌包含多个证书,请对照证书检查输出中的有效日期和颁发者。 请注意,通过SSL.com在YubiKey上颁发的EV代码签名证书应具有别名: Certificate for PIV Authentication.
    别名:用于PIV身份验证的证书条目类型:PrivateKeyEntry证书链长度:1证书[1]:所有者:OID.1.3.6.1.4.1.311.60.2.1.3 = US,OID.1.3.6.1.4.1.311.60.2.1.2 .2.5.4.15 =内华达州,OID.20081614243 =私人组织,CN = SSL公司,SERIALNUMBER = NV2,O = SSL公司,L =休斯顿,ST = TX,C =美国发行人:CN = SSL.com EV代码签名中级CA RSA R7299,O = SSL Corp,L = Houston,ST = Texas,C = US序列号:93f57a3bac6570c781580f63172e17有效期自:Fri Apr 12 46:04:2020 EDT 17直到:Sat Apr 12 46:04:2021 EDT XNUMX
  5. 使用如下命令对文件签名并加时间戳:
    • jsign 系统范围内安装的命令:
      jsign --keystore eToken.cfg --alias“用于PIV身份验证的证书” --storetype PKCS11 --storepass令牌-PIN-tsaurl http://ts.ssl.com --tsmode RFC3161文件-TO-SIGN
    • 与Jsigner .jar 文件:
      java -jar jsign-3.1.jar --keystore eToken.cfg --alias“用于PIV身份验证的证书” --storetype PKCS11 --storepass令牌PIN --tsaurl http://ts.ssl.com --tsmode RFC3161文件-签署
  6. 如果命令成功执行,则应该看到如下输出:
    将Authenticode签名添加到example.exe
请注意: 默认情况下,SSL.com 支持来自 ECDSA 密钥的时间戳。

如果您遇到此错误: The timestamp certificate does not meet a minimum public key length requirement,您应该联系您的软件供应商以允许来自 ECDSA 密钥的时间戳。

如果您的软件供应商无法允许使用普通端点,您可以使用此旧版端点 http://ts.ssl.com/legacy 从 RSA 时间戳单元获取时间戳。

验证数字签名

  1. 您可以通过在Windows中查看签名详细信息来验证数字签名是否有效。
    可以进行数字签名
  2. 您还可以使用 签名工具 在Windows中验证数字签名。
    signtool.exe验证/ pa'C:\ Users \ Aaron Russell \ Desktop \ example.exe'文件:C:\ Users \ Aaron Russell \ Desktop \ example.exe索引算法时间戳=========== ============================ 0 sha256 RFC3161已成功验证:C:\ Users \ Aaron Russell \ Desktop \ example.exe

保持信息灵通和安全

SSL.com 是网络安全领域的全球领导者, PKI 和数字证书。注册以接收最新的行业新闻、提示和产品公告 SSL.com.

我们希望收到您的反馈

参加我们的调查,让我们知道您对最近购买的想法。