2013-11-21 1 views
0

QTCreator에서 매우 기본적인 서버/클라이언트 작업을 수행하고 있습니다. 클라이언트가 연결할 때 서버가 클라이언트에 인증서를 보내도록해야합니다. 서버에 다음 코드가 있습니다.QSslSocket 함수에 액세스하려고 할 때 서버가 다운 됨

void Dialog::createSocket() 

{  
tcpSocket = (QSslSocket*)tcpServer->nextPendingConnection(); 

QByteArray key; 
QByteArray cert; 
QByteArray block; 

QFile fileKey("C:/Users/siu850967358.AD.002/Desktop/ECE424_Lab2/server.key"); 
if(fileKey.open(QIODevice ::ReadOnly)) 
{ 
     key = fileKey.readAll(); 
     fileKey.close(); 
} 
else 
{ 
     qDebug() << fileKey.errorString(); 
} 

QFile fileCert("C:/Users/siu850967358.AD.002/Desktop/ECE424_Lab2/server.crt"); 
if(fileCert.open(QIODevice ::ReadOnly)) 
{ 
     cert = fileCert.readAll(); 
     fileCert.close(); 
} 
else 
{ 
     qDebug() << fileCert.errorString(); 
} 

qDebug() << key + "\n" + cert; 

QString mykey(cert); 
QSslKey ssl_Key(key, QSsl::Rsa); 
QSslKey* sslKey = &ssl_Key; 
QSslCertificate ssl_Cert(cert); 
QSslCertificate* sslCert = &ssl_Cert; 


//CRASH HAPPENS HERE 

qDebug() << "ok"; 
tcpSocket->setPrivateKey(ssl_Key); 
qDebug() << "ok2"; 
tcpSocket->setLocalCertificate(ssl_Cert); 
qDebug() << "Key and certificate set"; 


//CRASH HAPPENS HERE 


QDataStream out(&block, QIODevice::WriteOnly); 
out.setVersion(QDataStream::Qt_4_0); 
out << (quint16)0; 
out << mykey; 
out.device()->seek(0); 
out << (quint16)(block.size() - sizeof(quint16)); 
qDebug() << "write the certificate to the socket so that client may get the pubkey"; 
tcpSocket->write(block); 


//connect(tcpSocket, SIGNAL(encrypted()), this, SLOT(readSocket())); 
connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(readSocket())); 
tcpSocket->startServerEncryption(); 


} 

tcpSocket-> setPrivateKey (ssl_Key); 충돌을 일으킨다. tcpSocket-> setPrivateKey (key); does not는 충돌을 일으킨다. 그러나 나는 그것이 틀리다라고 생각한다. ... tcpSocket-> setLocalCertificate()와 같은 거래.

어떤 아이디어 ?? 이 위치에서 btw 너무 추락합니다 ... 미리 감사드립니다

답변

관련 문제