如何正确抑制



访问打印机时的模态?

我试图通过此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-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参数的情况下启动)。

    这就是为什么首选使用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中最好地解释了此过程。

    签名消息
  • Signing使用私钥创建一个SHA1 signature(附加到QZ托盘的JSON消息中)。
  • 在1.9中,签名基于消息内容,但是出于性能和兼容性原因,2.0切换到hashing the message first
  • 如果签名提供了validates against the certificate/chain而不是reached a timeout,并且证书没有被吊销并且没有过期,则安全警告消失。

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

    07-27 17:18