抑制" localhost想要访问连接的打印机不受信任的网站"访问打印机 - QZ托盘时

时间:2016-10-21 03:42:11

标签: javascript printing qz-tray

如何正确抑制

  

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

3 个答案:

答案 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-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
});

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

答案 1 :(得分:0)

只需禁止警告

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

免责声明:此方法不应在生产中使用,消息不会被加密,使用后果自负。

  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());
    

    进入

    allowButton.setEnabled(true);
    
  6. 使用以下语言进行编译:

    • ant nsis for Windows
    • ant pkgbuild for MacOS
    • ant makeself(对于Linux)

    实际上,这不仅会编译,还会创建安装程序。 QZ团队出色地完成了所有工作的自动化。

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

  8. 您将第一次看到警告,但是现在您可以Remember永远做出Allow的决定。

如果您需要真正安全的设置,建议您提供高级支持。

答案 2 :(得分:-2)

我使用以下解决方案: [https://sourceforge.net/projects/no-dialog-qz-tray/][1]

第一个完整的QZ托盘,例如Windows版本的qz-tray-2.0.7.exe 然后替换qz-tray.jar