首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ALPN通过TLS连接

使用ALPN通过TLS连接
EN

Stack Overflow用户
提问于 2018-08-17 02:04:41
回答 1查看 823关注 0票数 0

我正在尝试使用C# net Core2.1类库连接到亚马逊IoT MQTT broker。我的要求是我必须使用端口443,这意味着根据Amazon的文档,我必须使用支持ALPN的连接。

.Net Core2.1现在提供了支持此功能的方法,因此我尝试使用以下代码:

(注意:我可以使用端口8883而不是443来尝试相同的代码,它可以正常连接并发送我的MQTT数据,所以我知道我的证书和端点地址是正确的。)

代码语言:javascript
复制
    this.socket = new Socket(this.remoteIpAddress.GetAddressFamily(), SocketType.Stream, ProtocolType.Tcp);
    this.socket.Connect(new IPEndPoint(this.remoteIpAddress, this.remotePort));
    this.netStream = new NetworkStream(this.socket);
    this.sslStream = new SslStream(this.netStream, false, this.userCertificateValidationCallback, this.userCertificateSelectionCallback);
    X509CertificateCollection clientCertificates = null;
    clientCertificates = new X509CertificateCollection(new X509Certificate[] { this.clientCert });
    SslApplicationProtocol amzProtocol = new SslApplicationProtocol("x-amzn-mqtt-ca");
    System.Threading.CancellationToken token = new System.Threading.CancellationToken();

    SslClientAuthenticationOptions options = new SslClientAuthenticationOptions()
    {
        AllowRenegotiation = false,
        TargetHost = this.remoteHostName,
        ClientCertificates = clientCertificates,
        EnabledSslProtocols = SslProtocols.Tls12,
        CertificateRevocationCheckMode = X509RevocationMode.NoCheck,
        ApplicationProtocols = new List<SslApplicationProtocol>() { amzProtocol },
        LocalCertificateSelectionCallback = this.userCertificateSelectionCallback,
        RemoteCertificateValidationCallback = this.userCertificateValidationCallback,
        EncryptionPolicy = EncryptionPolicy.RequireEncryption
    };

    this.sslStream.AuthenticateAsClientAsync(options, token).Wait();

现在,据我所知,我应该看到(我正在使用wireshark)一个添加到客户端Hello握手协议的扩展,类似于:

代码语言:javascript
复制
    Extension: Application Layer Protocol Negotiation
      Type: Application Layer Protocol Negotiation (0x0010)
      Length: ##
      ALPN Extension Length: ##
      ALPN Protocol
        ALPN string length: 14
        ALPN Next Protocol: x-amzn-mqtt-ca

但是我没有得到那个扩展,而且端口443上的连接失败。

我是不是在设置协议列表时遗漏了什么?我没有从中得到任何错误,但由于这是一个相当新的版本,所以没有太多的参考材料来寻找提示。

EN

回答 1

Stack Overflow用户

发布于 2018-08-21 01:36:45

好吧,看起来即使Net CORE 2.1已经添加了支持这一功能,但它不能在Windows7上工作。你必须使用Windows8.1或更高版本。这在代码中或GitHub上的示例中都没有记录,但我从一个开发团队中发现,出于某种原因,他们决定让它“静默失败”,而不是抛出错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51882944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档