diff --git a/src/server.cpp b/src/server.cpp
index 40a0e3c..1b22f96 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -67,7 +67,12 @@ void Server::start()
         qWarning() << "Unable to open private key file.";
     }
     else {
-        QSslKey privateKey(&keyFile, QSsl::Rsa);
+        QSslKey privateKey;
+        privateKey = QSslKey(&keyFile, QSsl::Ec);
+        if (privateKey.isNull()) {
+            keyFile.reset();
+            privateKey = QSslKey(&keyFile, QSsl::Rsa);
+        }
         keyFile.close();
 
         QFile certFile(certificatePath);
@@ -75,7 +80,7 @@ void Server::start()
             qWarning() << "Unable to open certificate file.";
         }
         else {
-            QSslCertificate certificate(&certFile);
+            QList<QSslCertificate> certs = QSslCertificate::fromData(certFile.readAll());
             certFile.close();
 
             QFile caFile(caCertificatePath);
@@ -86,7 +91,11 @@ void Server::start()
             }
 
             sslConfig.setPrivateKey(privateKey);
-            sslConfig.setLocalCertificate(certificate);
+            if (!certs.isEmpty()) {
+                sslConfig.setLocalCertificate(certs.first());
+                if (certs.size() > 1)
+                    sslConfig.setCaCertificates(certs.mid(1));
+            }
             secure_server->setSslConfiguration(sslConfig);
         }
     }