证书链的根证书是自签名和不信任的
The root certificate of the certificate chain is self-signed, and untrusted
我在Godaddy购买了证书。我从他们那里得到了三个文件:centerry.crt,citialatechain.crt,private.key
我有一个QT应用程序与SSL通信到运行烧瓶的Ubuntu服务器。
该网站正在https上工作和运行。
我在Apache方面没有任何问题,但是在这里我如何使用证书。
in/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上运行,则会有什么区别。
谢谢
看起来您正在混合代码中的证书文件和链条文件。您将本地证书设置为CA证书链和CA证书链文件作为完整证书链。您还需要从链文件加载所有CA证书。我假设certificate.crt
仅包含本地证书文件,而certificatechain.crt
仅包含中间证书,而不包含本地证书。
另一方面,您想实现什么?您是否启用了客户端和服务器端身份验证,因为您正在设置本地证书并在客户端上设置键?在这种情况下,您显然应该有两组证书。
无论如何,您可以尝试以下代码来配置QT应用程序。QT是一个跨平台环境,因此,如果您在两个平台上配置了相同的openssl
版本,则不应存在差异。
void InitSSL()
{
m_sslConfiguration.setProtocol(QSsl::TlsV1_2);
// Set certificate to configuration
QFile certificate_file(path_certificate);
if (!certificate_file.open(QIODevice::ReadOnly))
{
qWarning() << "error opening certificate file"
<< QDir::current().absoluteFilePath(certificate_file.fileName());
return;
}
QSslCertificate certificate(&certificate_file, QSsl::Der);
certificate_file.close();
if (!certificate.isValid())
{
qWarning() << "Certificate " << rCertificateFileName << " is not valid:"
<< "valid from " << certificate.effectiveDate().toString("yyyy-MM-dd")
<< " to " << certificate.expiryDate().toString("yyyy-MM-dd");
return;
}
m_sslConfiguration.setLocalCertificate(certificate);
// Set CA chain to configuration
QList<QSslCertificate> ca_certificates = QSslCertificate::fromPath(path_certificate_chain, QSsl::Der);
if (ca_certificates.isEmpty())
{
qWarning() << "error loading CA certificates from file " << path_certificate_chain;
return;
}
m_sslConfiguration.setCaCertificates(ca_certificates);
// Set key to configuration
QString key_file_path(DATABASE_PATH + DATABASE_KEY_PATH_SSL);
QFile key_file(key_file_path);
if (!key_file.open(QIODevice::ReadOnly))
{
qWarning() << "Error opening key file "
<< QDir::current().absoluteFilePath(key_file.fileName());
return;
}
QSslKey key(&key_file, QSsl::Rsa);
key_file.close();
if (key.isNull())
{
qWarning() << "Key " << key_file_path << " is null";
return;
}
m_sslConfiguration.setPrivateKey(key);
}
而不是qssslcertificate :: FromPath您可以从文件中加载CA证书,也可以使用qssslcertificate :: frofdata或qssslcertificate :: frofDevice。
您确定证书文件是否以der格式?如果它们是PEM,则可以删除QSsl::Der
,因为QSsl::Pem
是默认值。
- CertGetCertificateChain 具有支持的内存存储和证书信任列表
- 从网站复制证书,并使用脚本将其添加到受信任的根证书颁发机构
- curl_easy_perform() 失败:SSL 对等证书或 SSH 远程密钥不正常
- 获取X509代码签名证书的序列号,以不受管理的C/C 签名
- 证书链的根证书是自签名和不信任的
- SSL_CTX_load_verify_locations和受信任的证书
- 使用CryptUIWizImport自动导入证书作为C++的受信任根
- 从 Java KS 导出的自签名证书不起作用
- QSsl错误:证书是自签名的,不受信任
- 在带有OpenSSL的Windows上使用受信任证书
- 如何使用CryptoAPI在windows7上获取证书信任列表
- 为什么phpseclib生成不兼容的证书
- OpenSSL区分受信任CA证书和自签名CA证书
- Libcurl证书固定工作在iPhone上,但不是在Android上
- ssl对端证书或ssh远程密钥不正确
- 添加x509v3扩展会导致Mozilla pkix不信任
- Qt QSslSocket "证书是自签名的,不可信的"
- 为什么我不能获得用户正在使用的证书的正确信息?
- 如何在C++中使用openssl创建证书验证的信任链
- 对接口的Release调用是否确保COM组件不受信任