如何正确抑制
localhost想要访问连接的打印机不受信任的网站
访问打印机时的模态?
我尝试通过此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
答案 0 :(得分:4)
版本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
并通过命令行使用证书覆盖启动软件。 e.g:
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浏览器无法访问的目录中。
答案 1 :(得分:0)
如果您在隔离的计算机中使用QZ托盘(例如我的情况),本地环境或出于任何原因,您不需要加密消息,而只是想摆脱警告消息,则可以禁用警告对话框本身。
免责声明:此方法不应在生产中使用,消息不会被加密,使用后果自负。
导航和编辑
/src/qz/ws/PrintSocketClient.java
更改行476
从此:
if (cert.isTrusted() && cert.isSaved()) {
进入
if (cert.isSaved()) {
导航和编辑/src/qz/ui/GatewayDialog.java
更改行92
来自
allowButton.setEnabled(persistentCheckBox.isSelected());
进入
allowButton.setEnabled(true);
使用以下语言进行编译:
ant nsis
for Windows ant pkgbuild
for MacOS ant makeself
(对于Linux)实际上,这不仅会编译,还会创建安装程序。 QZ团队出色地完成了所有工作的自动化。
使用刚刚创建的安装程序安装QZ托盘。
您将第一次看到警告,但是现在您可以Remember
永远做出Allow
的决定。
如果您需要真正安全的设置,建议您提供高级支持。
答案 2 :(得分:-2)
我使用以下解决方案: [https://sourceforge.net/projects/no-dialog-qz-tray/][1]
第一个完整的QZ托盘,例如Windows版本的qz-tray-2.0.7.exe 然后替换qz-tray.jar