访问打印机时禁止显示“ localhost要访问连接的打印机不受信任的网站”-QZ-tray

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)

tre*_*esf 6

qz-tray.properties倍率将与版本推出2.0.2,并在写这篇的时候,2.0.1是最新的稳定版本

可能的选择:

由于后一个选项需要修改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浏览器无法访问的目录中。


Zoo*_*MMX 5

只是压制警告

如果您在隔离的机器(如我的情况)、本地环境或出于任何原因使用 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()) {
    
    Run Code Online (Sandbox Code Playgroud)

    进入

    if (cert.isSaved()) {
    
    Run Code Online (Sandbox Code Playgroud)
  5. 导航和编辑/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)
  6. 编译使用:

    • ant nsis 用于窗户
    • ant pkgbuild 适用于 MacOS
    • ant makeself 用于 linux

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

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

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

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

  • 绕过对话框后,所有网页都可以访问 USB 端口、串行端口、打印机,在某些情况下还可以访问本地文件系统。自签名实例是最安全的(比付费证书更安全),因为只有那些有权访问私钥的实例才会显示为“受信任”。建议对已接受的答案进行代码修改是一个非常危险的提议,因为任何毫无戒心的站点都可以与某人的硬件进行通信。在没有非常非常强烈警告的情况下提出这个建议应该是违反最基本的道德标准的。 (2认同)