5 minutes read
Electron开发APP中U盾自动化数字签名

Fire bug
13/11/2022 2:42 AM大白话系列之:Electron-builder的自动化数字签名!
现在Windows系统中, 如果app程序没有代码签名证书, 或者代码签名授信级别较低时, 系统同样会将其列为可信程序, 只是当用户运行该应用时, 系统会显示安全提示。没有签名是寸步难行了!
那么Electron开发的app程序怎么进行签名呢 ?这个必须去看下Electron-builder的文档。
electron-builder官网关于数字签名的文档:https://www.electron.build/code-signing.html
在开发蜂巢指纹浏览器(NestBrowser)的实际遇到的需求, 需要解决。
对APP数字签名的需求:
1、多app下的所有dll和exe文件都进行数字签名
当前国内的数字证书发行机构一般都是提供U盾, 不会单独提供PFX证书文件。这是考虑到安全性和唯一性, 使用硬件设备限制了根证书文件的唯一性。electron-builder使用U盾签名的配置electron-builder.json如下:
这个certificateSubjectName怎么获取呢?
1、插入数字签名u盾:
2、在powsershell中运行如下命令:[这个命令找的相当辛苦, 查看electron-builder源码才找到]
Get-ChildItem -Recurse Cert: -CodeSigningCert | Select-Object -Property Subject,PSParentPath,Thumbprint | ConvertTo-Json -Compress
打包过程中, 让人瞠目结舌的事情出现了, u盾的密码验证窗口不停的弹出来才明白, 每个dll或者exe文件签名的时候, 都需要输入一次密码, 这…只能用自动输入了!
选择哪一种实现方法更好呢, 准备步骤如下: 1、用c实现进程查找窗口句柄查找并实现功能。又要翻一遍api了, 先等等。 2、用python3来实现。哇, 这个快, 上代码, sign.py代码如下:
import osimport timeimport win32guiimport win32apiimport win32condef click(hwd):win32gui.PostMessage(hwd, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, 0)win32gui.PostMessage(hwd, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, 0)def SetText(hwd, text):win32api.SendMessage(hwd,win32con.WM_SETTEXT,None, text)def getText(hwd):buffer = '0' *50len = win32gui.SendMessage(hwd, win32con.WM_GETTEXTLENGTH)+1 #获取edit控件文本长度win32gui.SendMessage(hwd, win32con.WM_GETTEXT, len, buffer) #读取文本print("getText:",len,buffer[:len-1])def proc(spwd):print('----proc start----')a = win32gui.FindWindow("#32770","设备登录")if a > 0:pwd = win32gui.FindWindowEx(a, None, 'Edit', None)btn = win32gui.FindWindowEx(a, None, 'Button', None)bsetpwd = Falseif pwd>0:#print("pwd:",pwd)pwd2 = win32gui.FindWindowEx(a, pwd, 'Edit', None)if pwd2>0:print("send password:",pwd2)SetText(pwd2,spwd)bsetpwd = Truetime.sleep(0.2)if bsetpwd and btn>0:#print("btn:",btn)text = win32gui.GetWindowText(btn)if text == "确定":print("send click:",btn)click(btn)#loginid = win32gui.GetWindowPlacement(a)else:print('Error:没有发现窗口')if __name__ == "__main__":while True:proc("u盾密码")time.sleep(1)
3、当然涉及窗口定位需要用到spy++。这个在Visual Studio中自带了, 没有的可以在网上下载一个
4、在运行yarn compile-win32开始编译打包以后, 运行python3 sign.py, 就全自动签名了。
蜂巢指纹浏览器(NestBrowser)使用的如上方案解决, 解放了双手。

Fire bug
Leader
Nestbrowser(蜂巢浏览器) 可自定义所有参数来隐藏和控制您的数字指纹。您可以模仿真实的 Internet 身份。 Nestbrowser 帮助您创建大量配置文件, 每个配置文件都有自己的数字指纹。这些配置文件彼此不重叠, 因此网站不会禁止您的帐户。这对于执行各种任务非常有用在网上。
Member since Mar 15, 2021