#windows #ssl
#Windows #ssl
Вопрос:
Что я делаю: запускаю простой HTTPS-сервер на своем ПК, просматриваю localhost и пытаюсь избежать предупреждения, установив временный сертификат.
Следующий код основан на том, что я нашел в этом примере библиотеки QtHttpServer: https://github.com/qt-labs/qthttpserver/blob/master/tests/auto/qhttpserver/tst_qhttpserver.cpp
Библиотека была собрана и протестирована без проблем.
Это мой код:
#include <QCoreApplication>
#include <QtHttpServer/QtHttpServer>
static const char g_privateKey[] = R"(-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDykG51ZjNJra8iS27g3DJojH1qG8C3Z Avo5U6Qz6NkOsjvr22
gXqOS4uwVUXdCAKxsP0Wwn2zGz5vxGpLPVKtbAmaqHYZuipMG/Qun3t QYBgR 9t
lmHdI8TNP2Om8stDO5uQyBH7DcMjPyIgpfc8fBoNLhCn4oC2n6JK9EMuhQIDAQAB
AoGAUHTLzrEJjgTINI3kxz0Ck18WMl3mPG9 Ew8lbl/jnb1V4VNhReoIpq40NVbz
h28ixaG5MRVt8Dy3Jwd1YmOCylHSujdFQ2u0pcHFmERgDS2bOMwMTRoFOj2qgMGS
9SM iXlPY5AQY8nEg7rLjMSfaC/8Hq4RXpkj4PeHh6N7AzkCQQD HzM3xBr Gvh
zco9Kt8IiKNlfeiA5gUQq1UPJzcWIEgW1Tgr5UzMUOcZ0HfYwhqL3 wMhzN4sba
1plB1QRXAkEA84sfM0jm9BRSqtYTPlhsYAmuPjeo24Pxel8ijEkToAu0ppEC6AQ3
zfwZD0ISgaWQ7af5TN/RCsoNVX79twP6gwJBANbtB Z6shERm38ARdZB6Tf8ViAb
fn4JZ4OhqVXYrKrOE3aLzYnTBGXGXMh53kytcksuOoBlB5JZ274Kj63arokCQFPo
9xMAZzJpXiImJ/MvHAfqzfH501/ukeCLrqeO9ggKgG9zPwEZkvCRj0DGjwHEPa7k
VOy7oJaLDxUJ7/iCkmkCQQCtTLsvDbGH4tyFK5VIPJbUcccIib dTzSTeONdUxKL
Yk C6o7OpaUWX ikp4Ow/6iHOAgXaeA2OolDer/NspUy
-----END RSA PRIVATE KEY-----)";
static const char g_certificate[] = R"(-----BEGIN CERTIFICATE-----
MIICrjCCAhegAwIBAgIUcuXjCSkJ2 v/Rqv/UHThTRGFlpswDQYJKoZIhvcNAQEL
BQAwaDELMAkGA1UEBhMCRlIxDzANBgNVBAgMBkZyYW5jZTERMA8GA1UEBwwIR3Jl
bm9ibGUxFjAUBgNVBAoMDVF0Q29udHJpYnV0b3IxHTAbBgNVBAMMFHFodHRwc3Nl
cnZlcnRlc3QuY29tMCAXDTE5MDkyNjA4NTc1MloYDzIyNTUwMzEzMDg1NzUyWjBo
MQswCQYDVQQGEwJGUjEPMA0GA1UECAwGRnJhbmNlMREwDwYDVQQHDAhHcmVub2Js
ZTEWMBQGA1UECgwNUXRDb250cmlidXRvcjEdMBsGA1UEAwwUcWh0dHBzc2VydmVy
dGVzdC5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAPKQbnVmM0mtryJL
buDcMmiMfWobwLdn4C jlTpDPo2Q6yO vbaBeo5Li7BVRd0IArGw/RbCfbMbPm/E
aks9Uq1sCZqodhm6Kkwb9C6fe35BgGBH722WYd0jxM0/Y6byy0M7m5DIEfsNwyM/
IiCl9zx8Gg0uEKfigLafokr0Qy6FAgMBAAGjUzBRMB0GA1UdDgQWBBTDMYCcl2jz
UUWByEzTj5Ew/LWkeDAfBgNVHSMEGDAWgBTDMYCcl2jzUUWByEzTj5Ew/LWkeDAP
BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4GBAMNupAOXoBih6RvuAn3w
W8jOIZfkn5CMYdbUSndY/Wrt4p07M8r9uFPWG4bXSwG6n9Nzl75X9b0ka/jqPjQ3
X769simPygCblBp2xwE6w14aHEBx4kcF1p2QbC1vHynszJxyVLvHqUjuJwVAoPrM
Imy6LOiw2tRTHPsj7UH16M6C
-----END CERTIFICATE-----)";
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
QHttpServer httpServer;
httpServer.route("/", []() { return "Hello world"; });
httpServer.sslSetup(QSslCertificate(g_certificate),
QSslKey(g_privateKey, QSsl::Rsa));
if (httpServer.listen(QHostAddress("127.0.0.1"),443)) {
qDebug() << "Server started";
return a.exec();
}
else {
qDebug() << "Server failed to start";
return 0;
}
}
Значения закрытого ключа и сертификата были буквально скопированы из примера QtHttpServer.
Сервер запускается, и я могу перейти к localhost (или qhttpsservertest.com , для которого я создал псевдоним в файле etc, просто чтобы убедиться, что он соответствует CN сертификата).
Однако, как и ожидалось, отображается предупреждение, и мне нужно подтвердить, прежде чем что-либо просматривать.
Я знаю, что могу добавить доверенный сертификат в ОС (в моем случае Windows). Другим программам, таким как Fiddler или Burp Suite, требуется нечто подобное для прозрачной работы с браузерами.
Но я не знаю, что здесь делать. Я просто скопировал содержимое сертификата в файл .cert и успешно импортировал его с помощью certmgr, но я продолжаю получать те же предупреждения при переходе на свой пользовательский сервер. Почему?
— РЕДАКТИРОВАТЬ —
Кажется, это не имеет ничего общего с Qt или QtHttpServer.
Я протестировал сертификат с помощью Nginx и по-прежнему получаю то же предупреждение браузера (ERR_CERT_COMMON_NAME_INVALID).
К вашему сведению, файл nginx.conf:
# ...
http {
# ...
server {
listen 443 ssl;
server_name qhttpsservertest.com;
ssl_certificate qhttpsservertest.pem;
ssl_certificate_key qhttpsservertest.key;
# ...
}
# ...
}
Это открывает вопрос для более широкой публики.
Какие манипуляции мне нужно выполнить в моей системе, чтобы избавиться от этих предупреждений?
Комментарии:
1. Что именно является вашим предупреждающим сообщением?
2. @Le Ngoc Thuong В нем говорится, независимо от браузера: «Ваше соединение не является частным… бла-бла-бла …NET::ERR_CERT_COMMON_NAME_INVALID». И вместо значка замка в адресной строке я получаю «небезопасно». При нажатии на это отображается «Сертификат (недействительный)».
3. Возможно, вам следует попробовать создать сертификат самостоятельно.
4. @Le Ngoc Thuong Я сделал это с помощью OpenSSL. Фактически, это было первое, что я сделал, прежде чем использовать пример QtHttpServer.
5. Вы пытались добавить сертификат в доверенный корень?
Ответ №1:
К счастью, я нашел краткое пошаговое руководство здесь.
Я игнорировал первые два шага. Я добавлял подписанный сертификат в доверенный корень.
Я надеюсь, что этот вопрос поможет другому новичку в будущем.