4

如何正确抑制

本地主机想要访问连接的打印机 不受信任的网站

访问打印机时出现模态?

我试图通过这个 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
4

2 回答 2

7

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 浏览器无法访问的目录中。

于 2016-10-27T03:51:09.117 回答
6

只是压制警告

如果您在隔离机器(如我的情况)、本地环境或出于任何原因使用 QZ Tray,您不需要加密消息而只想摆脱警告消息,您可以禁用警告对话框本身。

免责声明:此方法不应该在生产中使用,消息不会签名,任何网站都可以与您的硬件通信,使用风险自负。

  1. 克隆 QZ Tray 存储库 ( https://github.com/qzind/tray.git )。
  2. 实现编译依赖:Ant、Java、NSIS (Windows)。如果您使用的是 windows,我建议您使用Chocolatey,使用 Chocolatey 安装这些依赖项很简单。
  3. 获取代码编辑器或 IDE(我使用 IntelliJ Idea 社区版)。
  4. 导航和编辑 /src/qz/ws/PrintSocketClient.java更改线476

    由此:

    if (cert.isTrusted() && cert.isSaved()) {
    

    进入

    if (cert.isSaved()) {
    
  5. 导航和编辑/src/qz/ui/GatewayDialog.java更改行92

    allowButton.setEnabled(!persistentCheckBox.isSelected() || cert.isTrusted());
    

    进入

    allowButton.setEnabled(true);
    
  6. 编译使用:

    • ant nsis用于窗户
    • ant pkgbuild适用于 MacOS
    • ant makeself对于 Linux

    实际上,这不仅会编译,还会创建安装程序。QZ 团队在自动化一切方面做得很好。

  7. 使用刚刚创建的安装程序安装 QZ 托盘。

  8. 第一次你会看到警告,但现在你可以Remember决定Allow永远。

如果您需要真正安全的设置,我建议使用自签名证书或支付高级支持。

于 2019-05-05T18:45:02.947 回答