我在Godaddy上購買了證書。 從他們那裏,我得到了三個文件:certificate.crt,certificatechain.crt,private.key證書鏈的根證書是自簽名的,不可信的
我有一個QT應用程序與SSL通信到運行Flask的Ubuntu服務器。
該網站正在運行並在https上運行。
我在Apache方面沒有任何問題,但在這裏我如何使用證書。
在/etc/apache2/site-enabled/MyFlaskApp.conf
SSLEngine on
SSLCertificateFile /etc/ssl/certificate.crt
SSLCertificateKeyFile /etc/ssl/private.key
SSLCertificateChainFile /etc/ssl/certificatechain.crt
在QT:
void InitSSL()
{
m_sslConfiguration.setProtocol(QSsl::TlsV1_2);
// Set certificate to configuration
QFile certFile;
certFile.setFileName(path_certificate);
if(certFile.open(QIODevice::ReadOnly))
{
QList<QSslCertificate> certificates;
QSslCertificate certificate(&certFile, QSsl::Der);
certificates.append(certificate);
m_sslConfiguration.setCaCertificates(certificates);
}
QFile certChain;
certChain.setFileName(path_certificate_chain);
if(certChain.open(QIODevice::ReadOnly))
{
QList<QSslCertificate> certificates;
QSslCertificate certificate(&certChain, QSsl::Der);
certificates.append(certificate);
m_sslConfiguration.setLocalCertificateChain(certificates);
}
QFile keyFile;
keyFile.setFileName(DATABASE_PATH + DATABASE_KEY_PATH_SSL);
if(keyFile.open(QIODevice::ReadOnly))
{
QSslKey key= QSslKey(keyFile.readAll(), QSsl::Rsa);
m_sslConfiguration.setPrivateKey(key);
}
}
我總是得到一個SSL錯誤的說法,該證書鏈的根證書自簽名,不可信「
這是不是自簽名,我在GoDaddy上購買了證書
另外,讓我知道如果QT應用程序在Windows或Ubuntu上運行會產生什麼差異。
謝謝
你指出它問「你想達到什麼?」。我有點困惑。我在Apache服務器上設置了.crt和.key。我的網站在https://上運行。客戶端(QT)需要什麼來驗證接收到的.crt是否可信?當我只使用「m_sslConf.setProtocol(QSsl :: TlsV1_2);」時,我通過SSL正確地將文件傳輸到服務器,但它是否安全?我不明白如何在QT中正確設置我的SSL連接,以便驗證收到的.crt文件。 – vincedjango
@vincedjango「客戶端(QT)需要什麼來驗證收到的.crt是否可信?」沒有。 Qt使用OpenSSL,並附帶它自己的一組可信任證書。如果您的服務器設置正確,它應該直接開箱即用:Qt應該拒絕與不可信證書的服務器的連接。來自CA根的信任鏈由服務器連同服務器證書發出的證書鏈建立。當您通過網絡瀏覽器連接到服務器時,確保事情正常工作。 –