在现今的数字时代,软件安全日益受到重视。对于Windows客户端开发者来说,使用EV(Extended Validation)证书对软件进行代码签名是确保用户信任和防止恶意攻击的关键一环。本文将探讨在Windows下的桌面软件开发过程中进行EV证书代码签名的必要性,未签名可能存在的问题,以及在签名过程中可能遇到的问题和解决方法。
EV证书代码签名能够保证用户在下载和安装软件时,能够确认软件的出处和完整性。通过签名,可以降低Windows操作系统对于软件的风险提示,提高用户的信任度。
未签名的软件在运行时,可能会受到Windows操作系统的风险提示。尤其在Windows 10以后的版本中,SmartScreen会对未签名的软件进行更严格的限制。用户在尝试安装或运行这类软件时,可能会看到来自Windows的警告信息,提示软件可能存在安全风险。这种情况会让用户对软件的安全性产生疑虑,降低软件的使用率。
在使用EV证书进行代码签名的过程中,可能会遇到一些问题,以下是两个主要的问题和相应的解决方法:
在购买EV证书后,证书供应商会提供一个物理USB Key,里面存放着证书信息。为了确保证书的安全性,需要将USB Key插入物理机来进行代码签名。然而,开发者在使用Windows远程桌面时,可能会发现无法正常加载Key中的证书。

例如GlobalSign使用的Token 5110 USB Key,在SafeNet软件提示如图“无令牌连接”,实际上右下角显示了USB设备弹出提示“弹出 Token JC”,设备管理器也正常显示了“智能卡读卡器”设备,但是软件始终无法识别到USB Key。
解决方法是,确保将USB Key插入到物理机上。如果必须使用远程桌面,在远程桌面设置中启用USB设备的本地资源共享。这样,在远程桌面中可以正常加载和使用USB Key中的证书。需要注意的是,这种方法可能会增加证书的安全风险,因此要确保远程连接的安全性。还有一种方法是,不要使用Windows默认的远程桌面工具,采用第三方的远程工具,但是这样也同样会增加安全风险。
对于使用Electron框架开发的程序,在进行代码签名时,需要签署编译过程中生成的所有文件。这包括主程序、动态链接库(DLLs)以及其他相关资源文件。如果有任何一个文件未被签名,软件可能会受到Windows操作系统的风险提示。
解决方法是,在编译过程中确保对所有生成的文件进行签名。可以在Electron的构建配置文件中添加签名选项,以自动对生成的文件进行签名(electron-builder的配置文件中增加certificateSubjectName为证书名称,增加signDlls为ture)。同时,确保使用正确的EV证书和私钥信息,避免签名失败或被识别为无效签名。
注意:所有的密码都必须在密码输入提示框提示后15s之内输入完成。
在PowerShell对Windows客户端进行代码签名时,需要执行notepad $PROFILE编辑PowerShell配置文件,添加如下信息:
$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding
注意: 如果从未配置过PowerShell,需要先执行New-Item -Path $PROFILE -Type File -Force再使用notepad $PROFILE编辑PowerShell配置文件。
否则可能无法正常匹配到中文名称的EV代码签名证书。
执行Get-ChildItem -Recurse Cert: -CodeSigningCert可以查看当前的代码签名证书列表。
撰写本文的时候electron-builder最新版是v23.6.0,需要使用Win10自带的PowerShell的版本进行签名(执行$PSVersionTable得到版本信息):
Name Value
---- -----
PSVersion 5.1.19041.2673
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.19041.2673
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
经过测试,在最新跨平台PowerShell中无法正常签名:
Name Value
---- -----
PSVersion 7.3.3
PSEdition Core
GitCommitId 7.3.3
OS Microsoft Windows 10.0.19045
Platform Win32NT
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0
除了上述问题之外,开发者在进行EV证书代码签名的过程中还可能遇到以下问题:
总之,对于Windows客户端开发者来说,进行EV证书代码签名是确保软件安全和提高用户信任度的关键。通过解决在签名过程中可能遇到的问题,开发者可以确保软件的签名有效,并为用户提供安全可靠的应用体验。在数字时代,保护用户的信息安全和隐私,是每一个开发者的责任和义务。
在现今的数字时代,软件安全日益受到重视。对于Windows客户端开发者来说,使用EV(Extended Validation)证书对软件进行代码签名是确保用户信任和防止恶意攻击的关键一环。本文将探讨在Windows下的桌面软件开发过程中进行EV证书代码签名的必要性,未签名可能存在的问题,以及在签名过程中可能遇到的问题和解决方法。
EV证书代码签名能够保证用户在下载和安装软件时,能够确认软件的出处和完整性。通过签名,可以降低Windows操作系统对于软件的风险提示,提高用户的信任度。
未签名的软件在运行时,可能会受到Windows操作系统的风险提示。尤其在Windows 10以后的版本中,SmartScreen会对未签名的软件进行更严格的限制。用户在尝试安装或运行这类软件时,可能会看到来自Windows的警告信息,提示软件可能存在安全风险。这种情况会让用户对软件的安全性产生疑虑,降低软件的使用率。
在使用EV证书进行代码签名的过程中,可能会遇到一些问题,以下是两个主要的问题和相应的解决方法:
在购买EV证书后,证书供应商会提供一个物理USB Key,里面存放着证书信息。为了确保证书的安全性,需要将USB Key插入物理机来进行代码签名。然而,开发者在使用Windows远程桌面时,可能会发现无法正常加载Key中的证书。

例如GlobalSign使用的Token 5110 USB Key,在SafeNet软件提示如图“无令牌连接”,实际上右下角显示了USB设备弹出提示“弹出 Token JC”,设备管理器也正常显示了“智能卡读卡器”设备,但是软件始终无法识别到USB Key。
解决方法是,确保将USB Key插入到物理机上。如果必须使用远程桌面,在远程桌面设置中启用USB设备的本地资源共享。这样,在远程桌面中可以正常加载和使用USB Key中的证书。需要注意的是,这种方法可能会增加证书的安全风险,因此要确保远程连接的安全性。还有一种方法是,不要使用Windows默认的远程桌面工具,采用第三方的远程工具,但是这样也同样会增加安全风险。
对于使用Electron框架开发的程序,在进行代码签名时,需要签署编译过程中生成的所有文件。这包括主程序、动态链接库(DLLs)以及其他相关资源文件。如果有任何一个文件未被签名,软件可能会受到Windows操作系统的风险提示。
解决方法是,在编译过程中确保对所有生成的文件进行签名。可以在Electron的构建配置文件中添加签名选项,以自动对生成的文件进行签名(electron-builder的配置文件中增加certificateSubjectName为证书名称,增加signDlls为ture)。同时,确保使用正确的EV证书和私钥信息,避免签名失败或被识别为无效签名。
注意:所有的密码都必须在密码输入提示框提示后15s之内输入完成。
在PowerShell对Windows客户端进行代码签名时,需要执行notepad $PROFILE编辑PowerShell配置文件,添加如下信息:
$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding
注意: 如果从未配置过PowerShell,需要先执行New-Item -Path $PROFILE -Type File -Force再使用notepad $PROFILE编辑PowerShell配置文件。
否则可能无法正常匹配到中文名称的EV代码签名证书。
执行Get-ChildItem -Recurse Cert: -CodeSigningCert可以查看当前的代码签名证书列表。
撰写本文的时候electron-builder最新版是v23.6.0,需要使用Win10自带的PowerShell的版本进行签名(执行$PSVersionTable得到版本信息):
Name Value
---- -----
PSVersion 5.1.19041.2673
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.19041.2673
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
经过测试,在最新跨平台PowerShell中无法正常签名:
Name Value
---- -----
PSVersion 7.3.3
PSEdition Core
GitCommitId 7.3.3
OS Microsoft Windows 10.0.19045
Platform Win32NT
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0
除了上述问题之外,开发者在进行EV证书代码签名的过程中还可能遇到以下问题:
总之,对于Windows客户端开发者来说,进行EV证书代码签名是确保软件安全和提高用户信任度的关键。通过解决在签名过程中可能遇到的问题,开发者可以确保软件的签名有效,并为用户提供安全可靠的应用体验。在数字时代,保护用户的信息安全和隐私,是每一个开发者的责任和义务。