小编Njå*_*aug的帖子

Poco + OpenSSL + CA PEM:2个相同站点中的1个出现"不可接受的证书"错误

我正在尝试与SSL进行SSL握手www1.filemail.com.我正在使用cURL cacert.pem,但我收到此错误:

Unacceptable certificate from 188.138.81.30: application verification failure
Run Code Online (Sandbox Code Playgroud)

与任何其他HTTPS网站进行握手有效 - 包括www2.filemail.com.www1并且www2应该配置相同 - 并且它们在所有浏览器中都能正常工作.他们也在这里测试很好(两个站点都发送了相同的证书和中间证书):

为什么我www1使用OpenSSL和cacert.pem文件会遇到这个问题?

www1和www2的证书设置必须有所不同.我已经使用无数的工具(openssl,ssllabs等)进行了测试,试图找出差异 - 但我总是得到两个站点完全相同的结果(运行我的代码时除外)

我在这里错过了什么?这些网站有什么区别?

(应该注意的是,我们使用的是RapidSSL提供的相对便宜的通配符证书 - 所以我猜它与中间证书或跨根证书有关 - 但是当使用上面提到的工具进行测试时,一切似乎都是有序的.)


码:

Poco::SharedPtr<Poco::Net::InvalidCertificateHandler> pCert = new Poco::Net::ConsoleCertificateHandler(false);
Poco::Net::Context::Ptr pContext = new Poco::Net::Context(Poco::Net::Context::CLIENT_USE, "", "", "C:\\cacert.pem", Poco::Net::Context::VERIFY_RELAXED, 9, false, "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
Poco::Net::SSLManager::instance().initializeClient(0, pCert, pContext);

URI uri("https://www1.filemail.com");
Poco::Net::SecureStreamSocket ss(Poco::Net::SocketAddress(uri.getHost().c_str(), uri.getPort()));
ss.completeHandshake();
Run Code Online (Sandbox Code Playgroud)

c++ ssl openssl pki poco-libraries

10
推荐指数
1
解决办法
822
查看次数

有时将错误的字节写入磁盘.硬件问题?

我使用C++ 11(VS2013)编写了一个基于UDP的传输协议.它的速度非常快 - 99.9%的时间都很棒.

在此输入图像描述

但我已经观察过几次将错误的字节写入磁盘(三星250 GB SSD 850 EVO) - 或者至少看起来如此.

这基本上是我转移6GB测试文件时会发生的事情:

  1. 该文件被拆分为较小的UDP数据包 - 大小为64K.(网络层将UDP数据报分解并重组为更大的包).
  2. 客户端将datapackage(udp)发送到服务器 - 使用AES256(OpenSSL)加密有效负载并包含数据+元数据.Payload还包含整个有效负载的SHA256哈希值 - 作为UDP校验和的额外完整性检查.
  3. 服务器接收数据包,将"ACK"包发送回客户端,然后计算SHA256哈希.哈希与客户端哈希相同 - 一切都很好
  4. 然后,服务器将包的数据写入磁盘(由于巨大的性能差异,使用fwrite而不是流).服务器一次只处理一个包 - 每个文件指针都有一个互斥锁,可以保护它不被另一个工作线程关闭,该工作线程关闭已经处于非活动状态10秒的文件放大器.
  5. 客户端接收UDP"ACK"包并重新发送未被确认的包(意味着他们没有使用它).传入ACK包的速率控制客户端的发送速度(也就是拥塞控制/ throtteling).服务器上接收的包的顺序无关紧要,因为每个包都包含一个Position值(文件中应写入数据的位置).

在传输完整个文件后,我在服务器和客户端上都对6GB文件进行了完整的SHA256哈希,但令我恐惧的是,我在过去几天观察到两次散列相同(当进行大约20次测试传输时) ).

在比较Beyond Compare中的文件后,我经常发现在服务器端有一两个位(在6 GB文件中)是错误的.

见下面的截图:在此输入图像描述

服务器代码 - 在验证DataPackage哈希后调用

void WriteToFile(long long position, unsigned char * data, int lengthOfData){

    boost::lock_guard<std::mutex> guard(filePointerMutex);

    //Open if required
    if (filePointer == nullptr){
        _wfopen_s(&filePointer, (U("\\\\?\\") + AbsoluteFilePathAndName).c_str(), L"wb");
    }

    //Seek
    fsetpos(filePointer, &position);

    //Write - not checking the result of the fwrite operation - …
Run Code Online (Sandbox Code Playgroud)

c++ hardware ram sha256

6
推荐指数
1
解决办法
242
查看次数

标签 统计

c++ ×2

hardware ×1

openssl ×1

pki ×1

poco-libraries ×1

ram ×1

sha256 ×1

ssl ×1