Chrome上的ERR_SSL_VERSION_INTERFERENCE

sea*_*te7 11 linux ssl google-chrome websocket

我有一个网站,使用websocket-sharp进行客户端 - 服务器通信,并拥有Let's Encrypt颁发的证书.其他浏览器可以使用,但谷歌Chrome(在Linux上)会ERR_SSL_VERSION_INTERFERENCE在控制台中出错.禁用TLS 1.3可以避免用户绕过此错误.我使用的是最新的稳定版本.

这个答案表明问题出在Chrome检测到"有缺陷的中间件"时,但我不知道Chrome究竟在寻找什么.

sea*_*te7 5

原来这是Mono的问题。Mono在较新的版本中使用BoringSSL,但在较旧的版本中默认未启用。在较新的Linux发行版上,您可以执行此操作,export MONO_TLS_PROVIDER=btls但对我而言不起作用,因为CentOS 6(版本4.4)上的gcc编译器太旧且不支持align编译BoringSSL所必需的。

首先,我从这里安装了gcc 4.8的说明:https : //gist.github.com/stephenturner/e3bc5cfacc2dc67eca8b

wget -O /etc/yum.repos.d/slc6-devtoolset.repo http://linuxsoft.cern.ch/cern/devtoolset/slc6-devtoolset.repo
sudo yum install devtoolset-2
scl enable devtoolset-2 bash
Run Code Online (Sandbox Code Playgroud)

然后,我从他们的网站(当前为5.12.0.226)下载了mono的最新发行包:http : //www.mono-project.com/docs/compiling-mono/linux/

wget https://download.mono-project.com/sources/mono/mono-5.12.0.226.tar.bz2
tar xvf mono-5.12.0.226.tar.bz2
cd mono-5.12.0.226
./configure --prefix=/usr/local
make
make install
Run Code Online (Sandbox Code Playgroud)

为了以防万一,我也这样做export MONO_TLS_PROVIDER=btls了,尽管我认为这不是必需的,但是无论您是否看一下末尾的输出,./configure它都应该告诉您是否启用了BTLS。

这也解决了最新的Firefox更新60.0.0.2的相同问题。