substrate基础(2)-polkadot apps远端访问配置

在一台设备上部署了substrate节点,在别的设备部署polkadot apps或者直接使用官方polkadot apps访问这个节点,需要通过https才可以。也就是说,要有证书才能访问。
本文我以官方的polkadot apps为例,来介绍如果配置并访问远端substrate
本文参考自波卡官方文档:https://wiki.polkadot.network/docs/maintain-wss

1. 节点启动

需要带上这个参数:--rpc-cors all,可以参考如下启动命令:

1
./target/release/node-template --dev --ws-external --rpc-external --no-telemetry --rpc-cors all

2. 生成自签名文件

当然,如果有公网域名或ip,能申请到开放的签名证书,那更好。后面配置起来更容易。
有公共证书的话,那就没必要执行下面这两条命令了

1
2
3
4
5
# 自签名文件、证书
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt

# 用于确保通信双方安全交换密钥
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

3. 部署并配置nginx

nginx的部署这里不考虑。自签名的话,如果上面两条命令中没有改动路径,那下面的配置直接复制到nginx的配置文件里即可。
具体配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
server {
listen 443 ssl; # 将端口转发为443

location / {
proxy_pass http://localhost:9944/; # 指向本地服务端口
proxy_http_version 1.1;
proxy_read_timeout 120s;
proxy_redirect off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
ssl_session_cache shared:cache_nginx_SSL:1m;
ssl_session_timeout 1440m;
ssl_ciphers "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS";
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
}

生效nginx配置:

1
2
3
4
5
6
7
8
# 检测配置是否正确
nginx -t

# 热生效配置
nginx -s reload

# 或者直接重启nginx
sudo service nginx restart

4. 客户端导入自签名证书

哪台客户端要通过浏览器访问部署好的节点,就在哪个客户端导入自签名证书。这个证书就是前面命令生成的/etc/ssl/certs/nginx-selfsigned.crt
具体导入方式,需要去网上找找。这里比如mac系统,只要双击.crt证书,即可导入,导入后,在mac自带的证书工具中,将该证书设置为全部信任即可(一定要设置)。

5. polkadot apps可视化连接

如果用的自签名证书,需要使用safari浏览器或者火狐浏览器来访问。edgechrome浏览器不支持自签名证书,因此访问会一直失败。
从上述配置可知,对外开放的是443端口,因此打开官方的polkadot apps 页面后,将里面的节点地址配置为:wss://你的ip或域名地址:443
页面即可访问节点

火狐浏览器中,需要设置将部署节点的服务器地址标记为信任,比如你的服务器地址是:192.168.1.2,则需要添加信任:https://192.168.1.2:443
火狐浏览器前往设置:设置 - 隐私与安全 - 查看证书 - 服务器 添加:https://192.168.1.2:443

5.1 访问失败原因

  1. nginx配置的对外访问的端口和你polkadot apps 中自己配置的地址的端口是否一致
  2. 防火墙是否开放该端口
  3. 目前chrome和edge不支持自签名证书(虽然魔改可以,但不建议,何必如此折腾),只能使用safari浏览器火狐浏览器,为此我还专门下了个多年没用过但火狐浏览器
  4. 节点启动时候是否带上参数:--rpc-cors all

总结

本文编辑完毕

参考

[1] Substrate官方文档
[1] Polkadot官方文档

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2017-2023 Jason
  • Visitors: | Views:

谢谢打赏~

微信