访问打印机时禁止 "localhost wants to access connected printers Untrusted Website" - QZ-tray
Suppress "localhost wants to access connected printers Untrusted Website" when accessing Printers - QZ-tray
如何正确抑制
localhost wants to access connected printers Untrusted Website
访问打印机时模式?
我已尝试通过此 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 托盘桌面启动器,这最终会在启用自动启动时导致不明显的问题(例如 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-side with risk of key leakage. This process is explained best in the sign-messages wiki.
签名通常在服务器端完成
签署消息
- 签名使用私钥创建一个SHA1 signature(附加到QZ Tray的JSON消息)。
- 在 1.9 中,签名基于消息内容,但出于性能和兼容性原因,2.0 切换为 hashing the message first。
- 如果提供的签名 validates against the certificate/chain and hasn't 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
});
注意:为防止密钥泄露,私钥应始终保存在网络浏览器无法访问的目录中。
只是抑制警告
如果你在一台孤立的机器上使用 QZ Tray(就像我的情况)、本地环境或出于任何原因你不需要加密消息而只是想摆脱警告消息你可以禁用警告对话框本身。
免责声明:此方法不应在生产中使用,不会对消息进行签名,任何网站都可以与您的硬件通信,使用风险自负。
- 克隆 QZ 托盘存储库 (https://github.com/qzind/tray.git)。
- 满足编译依赖:Ant、Java、NSIS (Windows)。
如果您使用 windows,我建议您使用 Chocolatey,使用 Chocolatey 可以直接安装这些依赖项。
- 获取代码编辑器或IDE(我使用的是 IntelliJ Idea 社区版)。
导航和编辑
/src/qz/ws/PrintSocketClient.java
换行476
来自:
if (cert.isTrusted() && cert.isSaved()) {
进入
if (cert.isSaved()) {
导航并编辑 /src/qz/ui/GatewayDialog.java
更改行 92
来自
allowButton.setEnabled(!persistentCheckBox.isSelected() || cert.isTrusted());
进入
allowButton.setEnabled(true);
编译使用:
ant nsis
对于 windows
ant pkgbuild
适用于 MacOS
ant makeself
对于 linux
实际上这不仅会编译,还会创建安装程序。 QZ 团队在自动化一切方面做得很好。
使用刚刚创建的安装程序安装 QZ 托盘。
第一次您会看到警告,但现在您可以Remember
决定永远Allow
。
如果您需要真正安全的设置,我建议使用自签名证书或支付高级支持。
如何正确抑制
localhost wants to access connected printers Untrusted Website
访问打印机时模式?
我已尝试通过此 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 托盘桌面启动器,这最终会在启用自动启动时导致不明显的问题(例如 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-side with risk of key leakage. This process is explained best in the sign-messages wiki.
签名通常在服务器端完成签署消息
- 签名使用私钥创建一个SHA1 signature(附加到QZ Tray的JSON消息)。
- 在 1.9 中,签名基于消息内容,但出于性能和兼容性原因,2.0 切换为 hashing the message first。
- 如果提供的签名 validates against the certificate/chain and hasn't 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
});
注意:为防止密钥泄露,私钥应始终保存在网络浏览器无法访问的目录中。
只是抑制警告
如果你在一台孤立的机器上使用 QZ Tray(就像我的情况)、本地环境或出于任何原因你不需要加密消息而只是想摆脱警告消息你可以禁用警告对话框本身。
免责声明:此方法不应在生产中使用,不会对消息进行签名,任何网站都可以与您的硬件通信,使用风险自负。
- 克隆 QZ 托盘存储库 (https://github.com/qzind/tray.git)。
- 满足编译依赖:Ant、Java、NSIS (Windows)。 如果您使用 windows,我建议您使用 Chocolatey,使用 Chocolatey 可以直接安装这些依赖项。
- 获取代码编辑器或IDE(我使用的是 IntelliJ Idea 社区版)。
导航和编辑
/src/qz/ws/PrintSocketClient.java
换行476
来自:
if (cert.isTrusted() && cert.isSaved()) {
进入
if (cert.isSaved()) {
导航并编辑
/src/qz/ui/GatewayDialog.java
更改行92
来自
allowButton.setEnabled(!persistentCheckBox.isSelected() || cert.isTrusted());
进入
allowButton.setEnabled(true);
编译使用:
ant nsis
对于 windowsant pkgbuild
适用于 MacOSant makeself
对于 linux
实际上这不仅会编译,还会创建安装程序。 QZ 团队在自动化一切方面做得很好。
使用刚刚创建的安装程序安装 QZ 托盘。
第一次您会看到警告,但现在您可以
Remember
决定永远Allow
。
如果您需要真正安全的设置,我建议使用自签名证书或支付高级支持。