[Qt-interest] Qt Https double Two-way authentication?

Kermit kermit.mei at gmail.com
Wed Oct 26 11:07:04 CEST 2011


Hello community,

    I want to use QNetwordAccessManager and QNetworkRequest to access a https web server(I used Nginx here). The code is like this:

//Init QSslConfiguration object: m_sslConfiguration

QList<QSslCertificate> caList = m_sslConfiguration.caCertificates();
caList.append(QSslCertificate("./cacert.pem")); //Root CA
m_sslConfiguration.setCaCertificates(caList);
QFile cpKey("./client.key");  //Client Private Key
if(cpKey.open(QIODevice::ReadOnly)) {
  m_sslConfiguration.setLocalCertificate(QSslCertificate(".client.crt"));
  m_sslConfiguration.setPrivateKey(QSslKey(&cpKey, QSsl::Rsa));
  m_sslConfiguration.setProtocol(QSsl::SslV3);  
  m_sslConfiguration.setPeerVerifyMode(QSslSocket::VerifyPeer);
}


//Request by QNetworkRequest:
if(m_webPageInfo) {
    QNetworkRequest request(m_webPageInfo->url());
    request.setSslConfiguration(m_sslConfiguration);
    get(request); //This will call QNetWorkAccessManager::get(...)
}


But I can't get the data, and nginx's log told me:

$ cat /var/log/nginx/localhost.ssl_error_log 
2011/10/26 16:39:22 [info] 22953#0: *1 client sent no required SSL certificate while reading client request headers, client: 10.0.2.15, server: , request: "GET /start.html HTTP/1.1", host: "10.0.2.15"
2011/10/26 16:41:49 [info] 22953#0: *2 client sent no required SSL certificate while reading client request headers, client: 10.0.2.15, server: , request: "GET /start.html HTTP/1.1", host: "10.0.2.15"
2011/10/26 16:43:49 [info] 22953#0: *3 client sent no required SSL certificate while reading client request headers, client: 10.0.2.15, server: , request: "GET /start.html HTTP/1.1", host: "10.0.2.15"
2011/10/26 16:45:17 [info] 22953#0: *4 client sent no required SSL certificate while reading client request headers, client: 10.0.2.15, server: , request: "GET /start.html HTTP/1.1", host: "10.0.2.15"


^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^

I don't know where I make the mistake so the the client can't 
sent the required SSL certificate?

By the way, if I don't ask the client's CA on web server, it works.
And the nginx.conf is now like this:
# SSL example
server {
    listen 443;
    ssl on;
    ssl_certificate /etc/ssl/nginx/nginx.crt;
    ssl_certificate_key /etc/ssl/nginx/nginx.key;
    ssl_verify_client on;
    ssl_client_certificate  /etc/ssl/nginx/cacert.pem;
    ssl_session_timeout 5m;
    access_log /var/log/nginx/localhost.ssl_access_log main;
    error_log /var/log/nginx/localhost.ssl_error_log info;
    root /var/www/localhost;
}




Thanks
B.R
Kermit



More information about the Qt-interest-old mailing list