Beispiel #1
0
 void Connection::handshake() {
   if (serverMode) {
     startServerEncryption();
   }
   else {
     startClientEncryption();
   }
 }
Beispiel #2
0
//Permet de renseigner le client avec qui le socket doit communiquer
bool Socket::setDescriptor(int socketDescriptor)
{
	if(this->state()==QAbstractSocket::ConnectedState) return false;
	if(!this->setSocketDescriptor(socketDescriptor)) return false;


	//On récupère la clé privée du serveur
	QFile file(PRIVATEKEY_FILE);
	if(!file.open(QIODevice::ReadOnly))
	{
		qDebug("La clé privée du serveur est introuvable.");
		return false;
	}

        QSslKey key(&file, QSsl::Rsa, QSsl::Pem, QSsl::PrivateKey, "pass");
	if (key.isNull())
	{
		qDebug("La clé privée du serveur est nulle");
		return false;
	}
	file.close();
	setPrivateKey(key);

	//on charge le certificat du client
	setLocalCertificate( LOCALCERTIFICATE_FILE );

	//on charge le certificat de notre ca
	if(!addCaCertificates(CACERTIFICATES_FILE))
	{
		qDebug("Impossible de charger le certificat du CA.");
		return false;
	}

        //on supprime la vérification des certificats des clients
        //seuls ces derniers vérifient les clés et certificat du serveur
        setPeerVerifyMode(QSslSocket::VerifyNone);

	//on ignore les erreurs car on a un certificat auto signé
        ignoreSslErrors();

	//on se connecte au serveur
	startServerEncryption();

	//On attends au plus 30secondes pour que la connexion s'établisse
	bool result = waitForConnected();
	if(!result) return result;

	result=waitForEncrypted();

	return result;
}
Beispiel #3
0
sslConnection::sslConnection( int socketDescriptor, QObject *parent ) : QSslSocket( parent )
{
  if( !setSocketDescriptor( socketDescriptor ) )
   {
     qDebug() << "Couldn't set socket descriptor";
     deleteLater();
     return;
   }
  
  setPeerVerifyMode(QSslSocket::VerifyPeer);
  setLocalCertificate( "mycert.pem" );
  setPrivateKey("mycert.pem");
  startServerEncryption();
}