TLS和DNS

作者: 偶是星爷 | 来源:发表于2018-04-28 19:34 被阅读15次

    今天遇到一个https连接失败的问题。内部用的OpenSSL库打印以下错误

    SSL23_GET_SERVER_HELLO:unknown protocol
    

    网上 https://stackoverflow.com/a/15168180/1118964 这个解释比较靠谱,返回这个错误是因为服务器没有正确返回ServerHello。最后查问题,结果是因为DNS缓存导致。TCP连接到一台不支持https的服务器上,所以才会有时成功有时失败。

    写DNS缓存的同学粗略的认为,域名和ip是一一对应关系。比如 http://www.mycloud.com 解析返回了一个addrinfo,这个地址不一定能用于 https://www.mycloud.com

    int getaddrinfo(const char *node, const char *service,
                    const struct addrinfo *hints,
                    struct addrinfo **res);
    

    getaddrinfo函数的service参数,https解析需要传入"443"或是"https",如果留空,返回的结果只能看运气了。某些服务器443端口虽然开了,但是不支持https,所以才有Stack Overflow上提到的wget大法。

    DNS解析是一项复杂的任务,除非特别有必要,还是尽量用系统的实现。


    思考题:如何解析到一个ipv6的地址?

    相关文章

      网友评论

          本文标题:TLS和DNS

          本文链接:https://www.haomeiwen.com/subject/sxknlftx.html