使用自签发证书解锁网易云音乐海外限制

我的网易云音乐黑胶VIP购入于大概一年前,双十一活动买一年送一年,一次性续上两年的有效期还是挺美滋滋的。不过自从来坡县后,由于版权地域限制,我的帐号已经吃灰半年了。很多收藏的歌曲都是灰色,无法播放。为了拯救我吃灰的黑胶VIP,找到一个能解锁的方法还是必须的。

通常能想到的办法,就是在国内购买一个云服务器,搭个代理连接回去,这样,能得到一个国内的IP,什么问题都迎刃而解了。不过,附加成本就是还得月供一个国内的云服务器。和国外的服务器相比,国内的服务器带宽小太多,跟国外的完全无法比拟,而且价格也不菲,性价比巨低。

最近,在网上看到一个通过自签名证书实现解锁网易云音乐海外限制的骚操作,手动操作了一波,完美绕过了网易云音乐的限制,我的黑胶VIP又可以派上用场了。下面简单介绍一下通过自签发证书解锁网易云音乐限制的操作。

大致的原理,就是通过自签发证书,并劫持本地的DNS解析,强行将网易云音乐的客户端请求导向你自己搭的服务器,服务器上通过Nginx反向代理,并设置为请求增加X-Real-IP参数,设置一个国内的IP地址,再把请求反向代理到真正的网易云音乐官网,从而达到解锁海外限制的目地。总的说来,你的服务器作为中间人,劫持网易云客户端的请求,并把请求伪装成从国内发起,从而达到欺骗服务端地域验证的效果。

解锁的大致操作如下:

生成自签发证书

我们需要先自签发一个根证书,再用这个根证书签发一个有效期为500天的服务端证书。如果本机装有openssl,可以直接开始操作:

1
2
3
4
5
6
# 创建CA私钥
openssl genrsa -des3 -out rootCA.key 2048
# 生成CA的自签名证书
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 3650 -out rootCA.pem
# 生成需要签名服务端证书的私钥
openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key

接着,再生成一个文本文件: v3.ext,内容如下:

1
2
3
4
5
6
7
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage=digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName=@alt_names

[alt_names]
DNS.1 = music.163.com

最后,使用根证书签发服务端证书:

1
2
# 生成并签名服务端证书
openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 500 -sha256 -extfile v3.ext

导入根证书到本机

以MacOS为例,接着,我们打开Mac OS上的 Keychain Access,导入根证书 rootCA.pem,并设置证书的信任设置:

https://xiaozhou.net/pics/netease/1.png

导入成功过后,用浏览器访问网易云音乐官网,会发现跟平常无异,不过点开证书信息后,会发现证书是我们自己签发的证书,嗯,我们成功劫持了DNS解析,并骗过了本机浏览器。

https://xiaozhou.net/pics/netease/2.png

修改本机hosts文件

这一步,是通过 hosts 文件,强行将 music.163.com 解析到我们自己的服务器去,这一招俗称”DNS劫持”。使用管理员权限,在本机 /etc/hosts 文件添加如下内容:

1
11.22.33.44 music.163.com

其中 11.22.33.44 也就是我们自己的服务器的公网IP地址了。

服务端部署

最后,把第一步用根证书签发的服务端证书,拷贝到我们自己的服务器上,并用Nginx配置反向代理:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
server {
listen 443;
server_name music.163.com;

location / {
proxy_pass https://music.163.com;
}

ssl_certificate /etc/nginx/ssl/music/server.crt;
ssl_certificate_key /etc/nginx/ssl/music/server.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
proxy_set_header Host $host;
proxy_set_header X-Real-IP 182.138.156.158;
proxy_set_header X-Forwarded-For 182.138.156.158;
}

配置中将所有请求直接反向代理到真正的 music.163.com ,这里的 X-Real-IPX-Forwarded-For 用到了一个搜到的国内IP,其实只要任意一个国内的IP就行,这里我找了一个成都电信的IP:

https://xiaozhou.net/pics/netease/3.png

万事具备,打开网易云音乐Mac OS客户端,发现之前因为限制被灰掉的歌曲现在可以播放了…… 另外,只要打开过一下Mac OS客户端,估计网易的服务端验证之后缓存了状态,发现手机端APP打开过后,灰掉的歌曲也能播放了。其实手机端也能通过劫持DNS的方式来实现解锁,不过我没有具体试过。

https://xiaozhou.net/pics/netease/4.png

嗯,此方法完美拯救了我的黑胶VIP……

支持原创技术分享,据说打赏我的人,都找到了女朋友!