golang / go

The Go programming language
https://go.dev
BSD 3-Clause "New" or "Revised" License
124.37k stars 17.71k forks source link

crypto/tls: RFC 9266: Channel Bindings for TLS 1.3 support #54103

Open Neustradamus opened 2 years ago

Neustradamus commented 2 years ago

Can you add the support of RFC 9266: Channel Bindings for TLS 1.3?

Channel Bindings for TLS: https://datatracker.ietf.org/doc/html/rfc5929

Little details, to know easily:

Thanks in advance.

ianlancetaylor commented 2 years ago

CC @golang/security @FiloSottile

cherrymui commented 2 years ago

I guess this will be added to the crypto/tls package? What would the support look like? Thanks.

Neustradamus commented 2 years ago

@cherrymui: Yes :)

It is linked to:

cc: @agl, @andres-erbsen, @FiloSottile, @codesenberg, @seankhliao.

Neustradamus commented 1 year ago

Dear all,

I have update the main description about tls-unique, tls-server-end-point, tls-exporter and I have added XEP-0388/XEP-0440/XEP-0474 links.

I think that you have seen the jabber.ru MITM:

FiloSottile commented 1 year ago

RFC 9266, Section 2, says

"tls-exporter" uses Exported Keying Material (EKM), which is already widely exposed by TLS implementations

Indeed, we already support EKM via ConnectionState.ExportKeyingMaterial.

What do you need us to change in crypto/tls?

Neustradamus commented 1 year ago

@FiloSottile: Thanks for your answer but there is not an announcement in code: RFC5929 / RFC9266 And I do not find:

Example GnuTLS:

morphf commented 10 months ago

Is there an update on this?

WantTrueNerds commented 1 month ago

I think the crypto/tls library already provides support for everything needed to perform channel binding.

Assuming my understanding of the RFC is correct, it appears like everything needed to implement channel binding in other libraries is already available. It would then be up to the downstream libraries (such as go-ldap, etc...) to implement channel binding using these attributes.

Note - the title of this issue mentions specifically TLSv1.3, however it is clear from the initial description that the ask is also intended to include TLSv1.2. The reason I say this is because "tis-unique" is only required to complete channel binding in TLSv1.2, and not TLSv1.3.

P.S. I didn't mean to single out go-ldap here, just used it as an example.