如何正确抑制
访问打印机时的模态?
我试图通过此OpenSSL命令创建证书:
openssl req -new -newkey rsa:2048 -sha256 -days 365 -nodes -x509 -keyout server.key -out server.crt
然后像这样添加覆盖:
authcert.override=server.crt
在
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
最佳答案
qz-tray.properties
覆盖将在2.0.2
版本中引入,在编写此版本时为 2.0.1
is the latest stable release。
可能的选择:
2.0.2
/ compile from source并使用qz-tray.properties
覆盖值2.0.2
/ compile from source,但在打包时提供证书,这将允许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托盘是few quick steps。但这只是成功的一半。要取消显示安全警告,必须对每个消息进行数字签名。这是
server.key
起作用的地方。我们在示例中将其称为private-key.pem
。尽管can be done client-side与risk of key leakage签署通常是在服务器端进行的。在the 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浏览器无法访问的目录中。