mirror of
https://github.com/rclone/rclone.git
synced 2025-06-20 03:37:50 +02:00
mega: fix tls handshake failure - fixes #8565
The cipher suites used by Mega's storage endpoints: https://github.com/meganz/webclient/issues/103 are no longer supported by default since Go 1.22: https://tip.golang.org/doc/go1.22#minor_library_changes This therefore assigns the cipher suites explicitly to include the one Mega needs.
This commit is contained in:
parent
96f5bbcdd7
commit
beffef2882
@ -17,9 +17,11 @@ Improvements:
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"crypto/tls"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"net/http"
|
||||||
"path"
|
"path"
|
||||||
"slices"
|
"slices"
|
||||||
"strings"
|
"strings"
|
||||||
@ -216,7 +218,25 @@ func NewFs(ctx context.Context, name, root string, m configmap.Mapper) (fs.Fs, e
|
|||||||
defer megaCacheMu.Unlock()
|
defer megaCacheMu.Unlock()
|
||||||
srv := megaCache[opt.User]
|
srv := megaCache[opt.User]
|
||||||
if srv == nil {
|
if srv == nil {
|
||||||
srv = mega.New().SetClient(fshttp.NewClient(ctx))
|
// srv = mega.New().SetClient(fshttp.NewClient(ctx))
|
||||||
|
|
||||||
|
// Workaround for Mega's use of insecure cipher suites which are no longer supported by default since Go 1.22.
|
||||||
|
// Relevant issues:
|
||||||
|
// https://github.com/rclone/rclone/issues/8565
|
||||||
|
// https://github.com/meganz/webclient/issues/103
|
||||||
|
clt := fshttp.NewClient(ctx)
|
||||||
|
clt.Transport = fshttp.NewTransportCustom(ctx, func(t *http.Transport) {
|
||||||
|
var ids []uint16
|
||||||
|
// Read default ciphers
|
||||||
|
for _, cs := range tls.CipherSuites() {
|
||||||
|
ids = append(ids, cs.ID)
|
||||||
|
}
|
||||||
|
// Insecure but Mega uses TLS_RSA_WITH_AES_128_GCM_SHA256 for storage endpoints
|
||||||
|
// (e.g. https://gfs302n114.userstorage.mega.co.nz) as of June 18, 2025.
|
||||||
|
t.TLSClientConfig.CipherSuites = append(ids, tls.TLS_RSA_WITH_AES_128_GCM_SHA256)
|
||||||
|
})
|
||||||
|
srv = mega.New().SetClient(clt)
|
||||||
|
|
||||||
srv.SetRetries(ci.LowLevelRetries) // let mega do the low level retries
|
srv.SetRetries(ci.LowLevelRetries) // let mega do the low level retries
|
||||||
srv.SetHTTPS(opt.UseHTTPS)
|
srv.SetHTTPS(opt.UseHTTPS)
|
||||||
srv.SetLogger(func(format string, v ...any) {
|
srv.SetLogger(func(format string, v ...any) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user