Hi guys, recently I have written a HTTPS Proxy Server that works perfectly. Now to learn more Im trying to write a Man In the Middle Proxy Server. So I created a SslCertificate and I'm trying to give myself certificate to browser. But I face with this Socket Error :

QAbstractSocket::SslHandshakeFailedError 13
The SSL/TLS handshake failed, so the connection was closed

I cant understand whats wrong there. I cant focus on it. I need some help in this case. Thanks alot
here is the code:

main.cpp

Qt Code:
  1. #include <QtCore/QCoreApplication>
  2. #include "server.h"
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6. QCoreApplication a(argc, argv);
  7.  
  8. Server myServer;
  9.  
  10. return a.exec();
  11. }
To copy to clipboard, switch view to plain text mode 


Server.h

Qt Code:
  1. #ifndef SERVER_H
  2. #define SERVER_H
  3.  
  4. #include <QTcpServer>
  5. #include <QSslSocket>
  6. #include <QSslKey>
  7. #include <QDebug>
  8. #include <QAbstractSocket>
  9.  
  10. class Server : public QTcpServer
  11. {
  12. Q_OBJECT
  13. public:
  14. explicit Server(QObject *parent = 0);
  15.  
  16. signals:
  17.  
  18. public slots:
  19.  
  20. private slots:
  21. void sltEncrypted();
  22. void sltReadFromClient();
  23. void sltSslErrors(QList<QSslError> errList);
  24. void sltSslModeChanged(QSslSocket::SslMode);
  25. void sltStateChanged(QAbstractSocket::SocketState);
  26. void sltSocketError(QAbstractSocket::SocketError);
  27.  
  28. protected:
  29. void incomingConnection(int socketDescriptor);
  30. };
  31. #endif // SERVER_H
To copy to clipboard, switch view to plain text mode 



Server.cpp

Qt Code:
  1. #include "server.h"
  2.  
  3. Server::Server(QObject *parent) :
  4. QTcpServer(parent)
  5. {
  6. this->listen(QHostAddress::Any,3555);
  7. if(this->isListening())
  8. {
  9. qDebug()<<"Is listening to port 3555";
  10. }else{
  11. qDebug()<<"Listen nemikone";
  12. }
  13. qDebug()<<"___________________________________________________";
  14. qDebug()<<"___________________________________________________";
  15. }
  16.  
  17. //************************************************************************************************
  18.  
  19. void Server::incomingConnection(int socketDescriptor)
  20. {
  21. QSslSocket *mySslSocket = new QSslSocket(this);
  22.  
  23. if(mySslSocket->setSocketDescriptor(socketDescriptor))
  24. {
  25. connect(mySslSocket,SIGNAL(encrypted()),this,SLOT(sltEncrypted()));
  26. connect(mySslSocket,SIGNAL(readyRead()),this,SLOT(sltReadFromClient()));
  27. connect(mySslSocket, SIGNAL(sslErrors(QList<QSslError>)),
  28. this, SLOT(sltSslErrors(QList<QSslError>)));
  29. connect( mySslSocket, SIGNAL(modeChanged(QSslSocket::SslMode)),
  30. this,SLOT(sltSslModeChanged(QSslSocket::SslMode)));
  31. connect( mySslSocket, SIGNAL(stateChanged(QAbstractSocket::SocketState)),
  32. this, SLOT(sltStateChanged(QAbstractSocket::SocketState)));
  33. connect(mySslSocket,SIGNAL(error(QAbstractSocket::SocketError)),
  34. this,SLOT(sltSocketError(QAbstractSocket::SocketError)));
  35. }else{
  36. delete mySslSocket;
  37. }
  38.  
  39. mySslSocket->setLocalCertificate("D://server.pem",QSsl::Pem);
  40. mySslSocket->setPrivateKey("D://server.pem",QSsl::Rsa,QSsl::Pem);
  41.  
  42. if(mySslSocket->localCertificate().isNull())
  43. {
  44. qDebug()<<"localCertificate is null";
  45. }else{
  46. qDebug()<<"localCertificate is Ok";
  47. }
  48.  
  49. if(mySslSocket->privateKey().isNull())
  50. {
  51. qDebug()<<"PrivateKey is null";
  52. }
  53. else{
  54. qDebug()<<"PrivateKey is Ok";
  55. }
  56. mySslSocket->startServerEncryption();
  57. }
  58.  
  59. //***************************************************************************************************
  60.  
  61. void Server::sltEncrypted()
  62. {
  63. qDebug()<<"........................encrypted.........................";
  64. //some code
  65. }
  66.  
  67. //***************************************************************************************************
  68.  
  69. void Server::sltReadFromClient()
  70. {
  71. qDebug()<<"read from client";
  72. // some code
  73. }
  74.  
  75. //***************************************************************************************************
  76.  
  77. void Server::sltSslErrors(QList<QSslError> errList)
  78. {
  79. qDebug() << "MySslServer::sslErrors(";
  80. foreach( QSslError err, errList )
  81. qDebug() << " " << err.errorString();
  82. qDebug() << ")";
  83. }
  84.  
  85. //***************************************************************************************************
  86.  
  87. void Server::sltSslModeChanged(QSslSocket::SslMode mode)
  88. {
  89. qDebug() << "MySslServer::sslModeChanged(" << (int)mode << ")";
  90. }
  91.  
  92. //****************************************************************************************************
  93.  
  94. void Server::sltSocketError(QAbstractSocket::SocketError socketErr)
  95. {
  96. qDebug() << "MySslServer::SocketErrors(" <<(int)socketErr << ")";
  97. }
  98.  
  99. //****************************************************************************************************
  100.  
  101. void Server::sltStateChanged(QAbstractSocket::SocketState state)
  102. {
  103. qDebug() << "MySslServer::stateChanged(" << (int)state << ")";
  104. }
To copy to clipboard, switch view to plain text mode