xyb*_*rek 4 javascript printing qz-tray
如何正确抑制
本地主机要访问连接的打印机不受信任的网站
访问打印机时的模态?
我试图通过此OpenSSL命令创建证书:
openssl req -new -newkey rsa:2048 -sha256 -days 365 -nodes -x509 -keyout server.key -out server.crt
Run Code Online (Sandbox Code Playgroud)
然后像这样添加覆盖:
authcert.override=server.crt
Run Code Online (Sandbox Code Playgroud)
在qz-tray.properties文件中。
但是,对话框仍然保持不变。有什么事吗
这是完整的证书属性文件:
authcert.override=C:\\Program Files\\QZ Tray\\auth\\server.crt
wss.alias=qz-tray
wss.keypass=keypass
wss.storepass=storepass
wss.host=0.0.0.0
Run Code Online (Sandbox Code Playgroud)
该qz-tray.properties倍率将与版本推出2.0.2,并在写这篇的时候,2.0.1是最新的稳定版本。
可能的选择:
等待2.0.2/ 从源代码编译并使用qz-tray.properties替代值
等待2.0.2/ 从源进行编译,但在打包时提供证书,这将使证书override.crt可以直接与安装程序一起分发。
ant nsis -Dauthcert.use=override.crt
Run Code Online (Sandbox Code Playgroud)
使用2.0.1并通过命令行覆盖证书来启动软件。例如:
java -DtrustedRootCert=override.crt -jar qz-tray.jar
Run Code Online (Sandbox Code Playgroud)由于后一个选项需要修改QZ Tray桌面启动器,因此在启用自动启动后,最终将导致非显而易见的问题(例如,Windows上的自动启动由qz-tray.exe触发,它将在不带-DtrustedRootCert参数的情况下启动) 。
这就是为什么首选2.0.2永久提供证书的功能qz-tray.properties。请注意,编译最新的QZ托盘仅需几个简单步骤。
但这只是成功的一半。为了取消安全警告,必须对每个消息进行数字签名。这就是server.key发挥作用的地方。我们private-key.pem在示例中将其称为。
签名通常在服务器端完成,尽管可以在客户端进行,但存在密钥泄漏的风险。在标志消息Wiki中可以最好地解释此过程。
签名消息
PHP签名示例:
<? // sign-message.php
$KEY = 'private-key.pem'; // or 'server.key', etc
$req = $_GET['request']; // i.e. 'toSign' from JS
$privateKey = openssl_get_privatekey(file_get_contents($KEY));
$signature = null;
openssl_sign($req, $signature, $privateKey);
if ($signature) {
header("Content-type: text/plain");
echo base64_encode($signature);
exit(0);
}
echo '<h1>Error signing message</h1>';
exit(1);
?>
Run Code Online (Sandbox Code Playgroud)
JavaScript:
qz.security.setSignaturePromise(function(toSign) {
return function(resolve, reject) {
$.ajax("/foo/bar/sign-message.php?request=" + toSign).then(resolve, reject);
};
});
qz.security.setCertificatePromise(function(resolve, reject) {
$.ajax("/foo/bar/digital-certificate.txt").then(resolve, reject); // or `server.crt`, etc
});
Run Code Online (Sandbox Code Playgroud)
注意:为防止密钥泄漏,应始终将私钥保存在Web浏览器无法访问的目录中。
如果您在隔离的机器(如我的情况)、本地环境或出于任何原因使用 QZ Tray,您不需要加密消息,只想摆脱警告消息,您可以禁用警告对话框本身。
免责声明:此方法不应该用于生产,消息不会被签名,任何网站都可以与您的硬件对话,使用风险自负。
导航和编辑
/src/qz/ws/PrintSocketClient.java更改行476
由此:
if (cert.isTrusted() && cert.isSaved()) {
Run Code Online (Sandbox Code Playgroud)
进入
if (cert.isSaved()) {
Run Code Online (Sandbox Code Playgroud)导航和编辑/src/qz/ui/GatewayDialog.java更改行92
从
allowButton.setEnabled(!persistentCheckBox.isSelected() || cert.isTrusted());
Run Code Online (Sandbox Code Playgroud)
进入
allowButton.setEnabled(true);
Run Code Online (Sandbox Code Playgroud)编译使用:
ant nsis 用于窗户ant pkgbuild 适用于 MacOSant makeself 用于 linux实际上,这不仅会编译,还会创建安装程序。QZ 团队在自动化一切方面做得很好。
使用刚刚创建的安装程序安装 QZ 托盘。
第一次你会看到警告,但现在你可以Remember决定Allow永远。
如果您需要真正安全的设置,我建议使用自签名证书或支付高级支持。
| 归档时间: |
|
| 查看次数: |
3346 次 |
| 最近记录: |