Подавить "localhost хочет получить доступ к подключенным принтерам Ненадежный веб-сайт" при доступе к принтерам - 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
1 ответ
qz-tray.properties
переопределение будет введено с версией 2.0.2
и во время написания этого, 2.0.1
это последняя стабильная версия.
Возможные варианты:
Ждать
2.0.2
/ скомпилировать из источника и использоватьqz-tray.properties
переопределить значение- -- ИЛИ ЖЕ --
Ждать
2.0.2
/ компилировать из исходного кода, но предоставить сертификат во время упаковки, что позволит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 Tray - это несколько быстрых шагов.
Но это только половина дела. Для подавления предупреждений безопасности каждое сообщение должно иметь цифровую подпись. Это где server.key
вступает в игру. Мы называем это private-key.pem
в наших примерах.
Подписание обычно выполняется на стороне сервера, хотя может выполняться на стороне клиента с риском утечки ключа. Этот процесс лучше всего объясняется в вики-сообщениях со знаками.
Подписание сообщений
- Подписание использует закрытый ключ для создания подписи SHA1 (которая добавляется в сообщение JSON в QZ Tray).
- В 1.9 подпись основывалась на содержимом сообщения, но 2.0 переключилась на хеширование сообщения в первую очередь по соображениям производительности и совместимости.
- Если предоставленная подпись проверяется на соответствие сертификату / цепочке и не достигла тайм-аута, а сертификат не отозван и не истек, предупреждение системы безопасности исчезнет.
Пример подписи 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 Tray ( 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());
в
allowButton.setEnabled(true);
Компиляция с использованием:
ant nsis
для оконant pkgbuild
для MacOSant makeself
для Linux
На самом деле это не только компилирует, но и создает установщик. Команда QZ отлично поработала, автоматизировав все.
Установите лоток QZ с помощью только что созданного установщика.
В первый раз вы увидите предупреждение, но теперь вы можете
Remember
решениеAllow
навсегда.
Я предлагаю платить премиум поддержку, если вам нужна действительно безопасная настройка.