Windows Teams -- Ngrok 的Https配置

Teams 开发需要使用内网映射工具,官方推荐ngrok,恰好之前用过ngrok,就直接拿原来的使用了,但是需要Https格式的。

Ngrok安装参见【Ngrok安装】,https配置如下:

首先安装openssl。

在Linux服务器上新建文件夹,然后执行命令

openssl genrsa -des3 -out server.key 1024

提示输入密码。

然后执行

openssl req -new -key server.key -out server.csr

先属于上一步的密码,然后开始配置:

Country Name (2 letter code) [XX]:cn #国家
State or Province Name (full name) []:shanxi #省份
Locality Name (eg, city) [Default City]:taiyuan #城市
Organization Name (eg, company) [Default Company Ltd]:BBA #公司
Organizational Unit Name (eg, section) []:BBF #部门
Common Name (eg, your name or your server's hostname) []:*.ngrok.ithinkcry.cn #主机名称
Email Address []:[email protected] #邮箱
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:XXX #证书请求密钥,CA读取证书的时候需要输入密码
An optional company name []:BBA #公司名称,CA读取证书的时候需要输入密码

结束之后,再次执行:

openssl rsa -in server.key -out server_nopassword.key #对key进行解密
openssl x509 -req -days 365 -in server.csr -signkey server_nopassword.key -out server.crt  #标记证书使用上述私钥(ryz123)和CSR

然后可以看到生成了若干文件

[zzj@jiba self]$ ll
total 16
-rw-rw-r-- 1 zzj zzj 928 Jul 13 15:34 server.crt
-rw-rw-r-- 1 zzj zzj 753 Jul 13 15:34 server.csr
-rw-rw-r-- 1 zzj zzj 963 Jul 13 15:33 server.key
-rw-rw-r-- 1 zzj zzj 891 Jul 13 15:34 server_nopassword.key

此处需要用到server.crt 和 server_nopassword.key

在nginx中配置的时候需要注意:因为ngrok服务端启动的时候命令如下:

/home/zzj/ngrokcode/ngrok/bin/ngrokd  -tlsKey=/home/zzj/ngrokcode/ngrok/assets/server/tls/snakeoil.key -tlsCrt=/home/zzj/ngrokcode/ngrok/assets/server/tls/snakeoil.crt -domain="ngrok.ithinkcry.cn" -httpAddr=":18015" -httpsAddr=":18014"  -tunnelAddr=":4443" > /home/zzj/ngrokcode/ngrok/bin/ngrok.log &

请注意里面的 参数 -httpAddr=":18015" -httpsAddr=":18014"

18015是http的,18014是https的,但是其实在nginx中配置的时候,全部选择18015.

Nginx配置如下:

http配置:

server {
    listen      80;
    server_name  *.ngrok.ithinkcry.cn;
    location / {
             proxy_pass http://172.26.88.76:18015;
             proxy_set_header Host $host:18015;
             proxy_set_header X-Real-IP $remote_addr;
             proxy_redirect off;
             client_max_body_size 10m;
             client_body_buffer_size 128k;
             proxy_connect_timeout 90;
             proxy_read_timeout 90;
             proxy_buffer_size 4k;
             proxy_buffers 6 128k;
             proxy_busy_buffers_size 256k;
             proxy_temp_file_write_size 256k;
        }
    location ~ .*\.(gif|jpg|png|bmp|swf)$ {
        proxy_pass  http://172.26.88.76:18015;
        proxy_set_header   Host             $host:18015;
             expires 30d;
        }
    location ~ .*\.(js|css)?$ {
        proxy_pass  http://172.26.88.76:18015;
        proxy_set_header   Host             $host:18015;
        expires 1d;
    }
}

https配置: 其中的端口都是18015,而不是18014.

server {
	listen       443 ssl;
	server_name  *.ngrok.ithinkcry.cn;
	ssl     on;
	ssl_certificate     /home/zzj/certs/self/server.crt;
	ssl_certificate_key    /home/zzj/certs/self/server_nopassword.key;
	ssl_session_timeout 5m;
	ssl_session_cache shared:SSL:1m;
	ssl_ciphers HIGH:!aNULL:!MD5;
	ssl_prefer_server_ciphers on;
	location / {
			 proxy_pass http://172.26.88.76:18015;
			 proxy_set_header Host $host:18015;
			 proxy_set_header X-Real-IP $remote_addr;
			 proxy_redirect off;
			 client_max_body_size 10m;
			 client_body_buffer_size 128k;
			 proxy_connect_timeout 90;
			 proxy_read_timeout 90;
			 proxy_buffer_size 4k;
			 proxy_buffers 6 128k;
			 proxy_busy_buffers_size 256k;
			 proxy_temp_file_write_size 256k;
		}
	location ~ .*\.(gif|jpg|png|bmp|swf|ico)$ {
		proxy_pass  http://172.26.88.76:18015;
		proxy_set_header   Host             $host:18015;
			 expires 30d;
		}
	location ~ .*\.(js|css)?$ {
		proxy_pass  http://172.26.88.76:18015;
		proxy_set_header   Host             $host:18015;
		expires 1d;
	}
}

配置完毕后,启动ngrok服务端和客户端。访问浏览器地址,虽然证书显示不可靠,但是可以成功访问https。

Windows Teams -- Ngrok 的Https配置_第1张图片

配置完毕

-------重点-----

经过配置发现,如果是失效/不可靠的证书,Windows Teams是无法通过你的Ngrok的URL传送请求的。

因此,我在阿里云申请了一个证书: teams.ngrok.ithinkcry.cn.

直接把阿里云上生成的nginx证书文件 key和pem下载下来,配置到nginx.confg中去。

server {
    listen       443 ssl;
    server_name  *.ngrok.ithinkcry.cn;
    ssl     on;

#    ssl_certificate     /home/zzj/certs/self/server.crt;
#    ssl_certificate_key    /home/zzj/certs/self/server_nopassword.key;
	ssl_certificate /home/zzj/certs/nginx/teams.ngrok.ithinkcry.cn.pem;
	ssl_certificate_key /home/zzj/certs/nginx/teams.ngrok.ithinkcry.cn.key;
	ssl_session_timeout 5m;
	ssl_session_cache shared:SSL:1m;
	ssl_ciphers HIGH:!aNULL:!MD5;
	ssl_prefer_server_ciphers on;

   location / {
             proxy_pass http://172.26.88.76:18015;
             proxy_set_header Host $host:18015;
             proxy_set_header X-Real-IP $remote_addr;
             proxy_redirect off;
             client_max_body_size 10m;
             client_body_buffer_size 128k;
             proxy_connect_timeout 90;
             proxy_read_timeout 90;
             proxy_buffer_size 4k;
             proxy_buffers 6 128k;
             proxy_busy_buffers_size 256k;
             proxy_temp_file_write_size 256k;
        }
    location ~ .*\.(gif|jpg|png|bmp|swf|ico)$ {
        proxy_pass  http://172.26.88.76:18015;
        proxy_set_header   Host             $host:18015;
             expires 30d;
        }
    location ~ .*\.(js|css)?$ {
        proxy_pass  http://172.26.88.76:18015;
        proxy_set_header   Host             $host:18015;
        expires 1d;
    }
}

这就表明,只能使用有效的https证书。此处我在ngrok客户端使用的域名前缀是 teams,就是说完整的url是teams.ngrok.ithinkcry.cn. 因此在申请阿里云证书的时候需要申请对应的teams.ngrok.ithinkcry.cn证书。

 

 

你可能感兴趣的:(Windows,Teams)