로컬 인증서 (.crt 파일)가 필요한 서버와 데이터를 교환해야합니다. 나는이 시도 :ssl 로컬 인증서가있는 QNetworkRequest
이 코드는 내가 Wireshark는에 다음과 같은 메시지가 실행loginRequest = QNetworkRequest(QUrl("https://somesite.com/login"));
QSslConfiguration sslConf = loginRequest.sslConfiguration();
QList<QSslCertificate> certs = QSslCertificate::fromPath(Preferences::certificatePath());
qDebug() << certs.first().issuerInfo(QSslCertificate::Organization); // prints name
sslConf.setLocalCertificate(certs.first());
qDebug() << "is valid " << sslConf.localCertificate().isValid(); // true
qDebug() << "is null " << sslConf.localCertificate().isNull(); // false
qDebug() << "protocol " << sslConf.protocol(); // 0
sslConf.setProtocol(QSsl::SslV3); // i also tried Qssl::AnyProtocol
qDebug() << "protocol " << sslConf.protocol(); // 0
// if i uncomment these i expect everithing to work
//QSslConfiguration::setDefaultConfiguration(sslConf);
//QSslSocket::addDefaultCaCertificate(certs.first());
//loginRequest.setSslConfiguration(sslConf);
QObject::connect(connectionManager, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)), this, SLOT(printSslErrors2(QNetworkReply*,QList<QSslError>)));
m_reply = connectionManager->get(loginRequest);
QObject::connect(m_reply, SIGNAL(readyRead()), this, SLOT(getCookie()));
QObject::connect(m_reply, SIGNAL(sslErrors(QList<QSslError>)), this, SLOT(printSslErrors(QList<QSslError>)));
(필터 : TCP & & SSL & & ip.addr == my_addr가) :이 예상되는
Client Hello
ServerHello, Certificate
Server Key Exchange, Certificate request, Server Hello Done
Alert (level: Warning, Description: no certificate), client key exchange, change cipher spec, encrypted handshake message
Alert (level: Fatal, Description: Handshake failure)
- 인증서를 적용하는 코드는 주석 처리되었지만 이상한 점은 - QNetworkAccessManager 및 QNetworkReply (슬롯 printSslErrors 및 printSslErrors2)에서 ssl 오류가 발생하지 않습니다.
나는이 3 개 라인의 주석을 제거하는 경우 :
//QSslConfiguration::setDefaultConfiguration(sslConf);
//QSslSocket::addDefaultCaCertificate(certs.first());
//loginRequest.setSslConfiguration(sslConf);
내가 와이어 샤크의 경우 Nothing (몇 SYN, ACK 및 FIN TCP 메시지,하지만 http 또는 SSL 트래픽)을 얻을 수 없습니다. 또한 QNetworkAccessManager 및 QNetworkReply에는 오류가 없으므로 idia가 잘못되었습니다.
Qt가 내 로컬 인증서를 수락 할 수있는 기회가 있습니까? 아니면 나를 도와 줄 3D 파티 Qt 지향적 인 lib가있을 수 있습니까?
피씨 : btw-ssl 및 https는 며칠 전 클라이언트 측 인증서가 필요하도록 서버가 변경되기 전에 정상적으로 작동했습니다.
P.P.S : 인증서에는 차이가있을 경우 자체 서명됩니다. 또한 시스템에 p12 파일을 '설치'하려고했는데 Chrome과 IE7 모두이를 사용하고 서버와 통신 할 수 있습니다.
1.이 사람이 로그인이 시작 나는 릴리스 될 것입니다 희망 시퀀스) 그래서 나는 왜 다른 신호가 무시 될지 모르겠다. 2. 신호/슬롯에는 오류가 없다. Tbh 내가 아는 유일한 오류 (응용 프로그램 출력 창에서보고되는) 신호 및 슬롯에 대한 것입니다 또는 존재하지 않거나 잘못된 매개 변수가 – DarkWalker
QMainWindow 클래스로 다른 신호를 얻는다면 좋습니다. Q_OBJECT 매크로를 확인하는 것은 내가 경험 문제 일 때 제일 먼저하는 일입니다. 실제 문제를 추적 할 수 있기를 바랍니다. – Matthew