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
通过命令行使用2.0.1
和启动具有证书覆盖的软件。例如:
java -DtrustedRootCert=override.crt -jar qz-tray.jar
由于后一个选项需要修改 QZ Tray 桌面启动器,这最终会在启用自动启动时导致不明显的问题(例如 Windows 上的自动启动是由 qz-tray.exe 触发的,它将在没有-DtrustedRootCert
参数的情况下启动) .
这就是为什么2.0.2
永久提供证书的功能qz-tray.properties
更受欢迎的原因。请注意,编译最新的 QZ Tray 只需几个快速步骤。
但这只是战斗的一半。要抑制安全警告,必须对每条消息进行数字签名。这就是server.key
发挥作用的地方。我们private-key.pem
在我们的例子中称之为。
签名通常在服务器端完成,尽管可以在客户端完成,但存在密钥泄漏的风险。这个过程在sign-messages 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);
?>
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
});
注意:为防止密钥泄露,私钥应始终保存在 Web 浏览器无法访问的目录中。