【问题标题】:Suppress "localhost wants to access connected printers Untrusted Website" when accessing Printers - QZ-tray访问打印机时抑制“localhost想要访问连接的打印机不受信任的网站” - QZ-tray
【发布时间】:2019-09-15 00:16:38
【问题描述】:

如何正确抑制

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

【问题讨论】:

  • @qz-support 你能帮忙检查一下吗?谢谢!
  • 有一个签名步骤,在 wiki/resources 文件夹中以几种不同的服务器语言进行了概述。您使用的是哪种服务器端语言?
  • @QZSupport 我们将使用 Electron(electron.atom.io) 部署 Web 应用程序,这将完全是 localhost
  • 我的意思是网络应用程序将用于物理信息亭
  • 我们也试过这个:developer.salesforce.com/blogs/developer-relations/2011/05/… 仍然得到允许弹出窗口

标签: javascript printing qz-tray


【解决方案1】:

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 参数)。

这就是为什么在qz-tray.properties 中永久提供证书的2.0.2 功能更受欢迎。注意,编译最新的QZ Tray是few quick steps

但这只是战斗的一半。要抑制安全警告,必须对每条消息进行数字签名。这就是server.key 发挥作用的地方。在我们的示例中,我们称之为private-key.pem

签名通常在服务器端完成,尽管can be done client-siderisk 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
});

注意:为防止密钥泄露,私钥应始终保存在网络浏览器无法访问的目录中。

【讨论】:

  • 登录qz托盘的目的是什么,可以禁用吗? qz托盘侧有CORS设置还不够吗?
  • What is the purpose of signing in qz tray 这对于它自己的问题可能更好,但它是为了验证网站是它所说的是谁,这在 JavaScript 中安全地做到这一点很棘手。 can it be disabled 是的,但是您必须重新编译(这很简单)。 Is it not sufficient to have CORS settings on qz tray side? 从安全角度来看,这可能就足够了,但每次安装都需要特殊配置。
【解决方案2】:

只是禁止警告

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

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

  1. 克隆 QZ 托盘存储库 (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 用于 Windows
    • ant pkgbuild 适用于 MacOS
    • ant makeself 用于 Linux

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

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

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

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

【讨论】:

  • 绕过对话框可以让所有网页访问 USB 端口、串行端口、打印机,在某些情况下还可以访问本地文件系统。自签名实例是最安全的(比付费证书更安全),因为只有那些有权访问私钥的实例才会显示为 "Trusted" 。建议对已接受的答案进行代码修改是一个非常危险的提议,因为任何毫无戒心的网站都可以与自己的硬件对话。在没有非常非常强烈的警告的情况下提出这个建议应该违反最基本的道德标准。
  • “邮件不会被加密”具有误导性。 “消息不会被签名”是正确的,但消费者不会知道这意味着什么。 “任何网站都可以与您的硬件对话”是最准确的。关于加密:HTTPS 将加密 HTTPS 页面的传输。 QZ Tray 没有做任何进一步的加密,它都在传输层上。相反,SHA1 数字签名用于验证。取消此验证意味着任何网站都可以在您不知情的情况下与您的硬件通信,这对任何 IT 专业人员来说都应该是可怕的。
  • @tresf 你是对的,我用你的警告和更正编辑了这个答案。
  • 谢谢,但是不需要高级支持的建议。自签名证书可以说是最安全的,因此省略任何涉及付款的细节将是最准确的(以及更少的请求)。
  • @tresf 谢谢你。我修改了那个建议。我仍然认为根据我的经验,支付支持实际上是可取的,但我也建议使用自签名证书。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
  • 2017-01-26
  • 2020-09-16
  • 2021-04-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多