多协议、性能稳定、丰富API的流媒体服务器软件
您现在的位置:首页  >  文档  >  支持SSL

Ti Top Streamer自己并没有实现SSL服务,但它借助Nginx间接实现了SSL服务。

这里稍微解释一下,之所以这么做,是因为在IT技术领域,Nginx已经是被广泛认可的前端网络代理工具,它在SSL的支持上,已经非常成熟和全面了,性能也非常卓越。 所以,我们没有必要自己在TiTopStreamer上实现SSL服务了,直接安装和试用Nginx即可。

本篇文章,我们就来介绍一下,如何生成或获取SSL证书,如何安装和配置Nginx,让它支持SSL,并能反向代理到TiTopStreamer上。

一、生成或获取SSL证书:

如何获得一个SSL证书?要回答这个问题前,你要首先要明确使用SSL证书的场景:

1)在公网环境下,在浏览器端使用,面向公众用户提供服务。

2)在内网环境使用,或者是在系统内部使用,用于服务器和服务器之间加密通信。

这是两个完全不同的场景:

对于第一个场景,你必须购买商业的SSL证书,毕竟你要让公网上的用户信任你这个机构,信任你提供的服务,你必须提供可信赖的SSL证书。 这种证书都会绑定你提供的域名。现在,购买一个商业SSL证书很方便,阿里云、腾讯云,上都可以购买。价格从一两千到几万都有。 我建议您购买绑定通配符域名的证书,例如*.ttstream.com。 这些证书服务商给您提供的SSL证书一般都会有好几种格式,在Nginx环境下要求使用PEM格式的证书文件,所以,请你准备好PEM格式的证书文件。 如果是其它格式,请咨询提供商,将其转换为PEM格式,当然了,网上也有很多资料介绍了如何在多个证书文件格式之间做转换。

对于第二个场景,主要是为了实现加密通信。这时,你可以自己生成一个SSL证书,这种证书叫做"自签名SSL证书"。 由于我们是要在Nginx环境下使用它,而Nginx使用的是PEM格式的证书文件, 所以,我们这里重点说明在Linux Server上,如何用OpenSSL工具,自己生成这个PEM证书文件。

1、第一步,创建私钥。

openssl genrsa -out your_private.key 2048
			


2、第二步,创建证书请求文件。

openssl req -new -key your_private.key -out csr.csr
			
在这个过程中,openssl会提示你输入一些必要的组织信息,下面是个例子:
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Beijing
Locality Name (eg, city) [Default City]:Beijing
Organization Name (eg, company) [Default Company Ltd]:Beijing TiLiu Technology Co.,Ltd.
Organizational Unit Name (eg, section) []:Beijing TiLiu Technology Co.,Ltd.
Common Name (eg, your name or your server's hostname) []:TiTopStreamer
Email Address []:streaming@ttstream.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:1234567890
An optional company name []:TTStream
			

以上要输入的信息,我建议你先在一个文本文件里准备好,在系统提示您输入时,直接粘贴拷贝,临时边思考边输入,很容易出错。


3、第三步,创建证书文件

openssl x509 -req -in csr.csr -signkey your_private.key -out your_ssl_certification.pem -days 3650
			

注意,-days表示有效期,上面的3650就是10年。


至此,你已经生成了SSL自签名证书文件。

建议你把私钥文件(在上面的例子中,就是your_private.key)以及证书文件(在上面的例子中,就是your_ssl_certification.pem),放在一个目录下(例如/usr/local/cert)。



二、安装Nginx:

安装Nginx,有两种方式:

第一种: 用包管理器安装,例如Centos下的yum或Debian下的apt,这种情况下,你的服务器必须能连接外网。

第二种: Nginx源码安装,也就是从源码开始编译和安装,这种情况不要求服务器能联网,因为即使你的服务器不能连接外网,您也可以先将Nginx源码下载到本地,然后再上传到服务器上。 当然了,如果能联网,您可以直接用wget下载Nginx源码。

如果就仅仅是安装Nginx,以上两种方法都很简单,选择哪种方式都可以。

但是,问题恰恰在于,这不仅仅是一个安装Nginx的事情,还涉及到一些其它的模块,例如openssl、pcre、zlib,以及它们的开发库。 这些模块都是必须的,如果不用包管理器(yum或apt)来安装,会很麻烦。

所以,基于这些考虑,我们建议您的服务器必须能联接外网,最起码在安装这些软件/模块时,能够连接外网,这样的话,安装过程就会很简单和轻松。

下面的安装步骤是假设您的服务器已经能够连接外网了,并以Centos为例,步骤如下:

1、检查pcre以及pcre-devel是否已经安装了,如果还没有安装,就安装它们

rpm -qi pcre
yum -y install pcre
以及
rpm -qi pcre-devel
yum -y install pcre-devel
			

2、检查zlib以及zlib-devel是否已经安装了,如果还没有安装,就安装它们

rpm -qi zlib
yum -y install zlib
以及
rpm -qi zlib-devel
yum -y install zlib-devel
			

3、检查openssl以及openssl-devel是否已经安装了,如果还没有安装,就安装它们

rpm -qi openssl
yum -y install openssl
以及
rpm -qi openssl-devel
yum -y install openssl-devel
			

下面开始正式安装Nginx,两种方式,都会列在下面,相比之下源码安装的灵活度更高一些。

4.1、源码安装Nginx (以1.25.1版本为例,其它版本,请替换版本号)
wget http://nginx.org/download/nginx-1.25.1.tar.gz
tar xzvf nginx-1.25.1.tar.gz
cd nginx-1.25.1
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-stream_ssl_module --with-stream
make
make install
			

注意: 在configure命令时,除了上面的可选模块,其它可选模块,你要看自己的项目需求,需要什么,就安装什么。这也是我前面说的"源码安装更灵活一些"的意思。

4.2、用包管理器yum来安装Nginx
yum install -y nginx
			

注:以上两种方法,选择其一即可,我通常倾向于源码安装,这样更透明、更灵活。

至此,Nginx的安装就完成了。


三、配置Nginx:

nginx上的配置,其实也很灵活,我下面只推荐一下最简单、最易于维护的配置方式:

1、在conf目录下创建一个子目录,里面放置我们的配置文件
cd /usr/local/nginx/conf
mkdir tcp.d
cd tcp.d
			
注:上面的子目录名tcp.d只是一个例子,别的名字,也没问题。因为我们要做TCP反向代理,所以就用这个名字了。

在这个目录,创建一个名字为test.conf的文本文件(文件名随意,但要.conf为扩展名),内容如下:
stream {
    
	upstream nginx_proxy {
		hash $remote_addr consistent;
		server 127.0.0.1:8080;
	}

	server {
		listen 443 ssl;
		ssl_certificate /usr/local/nginx/conf/cert/xxx证书文件名.pem;
		ssl_certificate_key /usr/local/nginx/conf/cert/xxx私钥.key;
		ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
		ssl_ciphers AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
		ssl_session_cache shared:SSL:10m;
		ssl_session_timeout 0m;
		proxy_connect_timeout 10s;
		proxy_timeout 30s;
		proxy_pass nginx_proxy;
	}
}	
			
我将上面的配置,挑一些重点部分,稍微解释一下:

1) upstream nginx_proxy : upstream是TCP反向代理指令,nginx_proxy就是一个TCP反向代理配置的名字,你用别的名字,完全没问题。

2) server 127.0.0.1:8080 : 指向TiTopStreamer的http流服务,因为TiTopStreamer就在本机上,所以是127.0.0.1,端口你自己根据需求配置,总之它就是要指向TiTopStreamer的一个服务。

3) listen 443 ssl : 对外提供SSL服务的端口,通常采用443,也是浏览器端默认采用https服务端口。

4) ssl_certificate : 后面跟着的是SSL证书文件的完整路径。

5) ssl_certificate_key : 后面跟着的是SSL证书的私钥文件。

6) proxy_pass nginx_proxy : TCP反向代理的目标配置。在这里,它指向nginx_proxy,也就是前面介绍的upstream nginx_proxy的配置。

其它部分,你可以上nginx.org的官网上查看说明。

2、配置nginx.conf
cd /usr/local/nginx/conf
vi nginx.conf			
			
在nginx.conf文件的最底部(最后一行)加入下面这一行的配置
include tcp.d/*.conf;			
			

注意:nginx.conf中,默认会打开80端口的服务,如果你不需要,请屏蔽它。当然,你也可以用它看验证nginx是否安装正确(用浏览器访问,会出现nginx的欢迎页面),确定安装正确后,再把它屏蔽掉。

至此,所以nginx的配置都完成了。


四、启动和停止nginx服务

1、启动nginx服务
cd /usr/local/nginx/sbin
./nginx		
			
2、停止nginx服务
cd /usr/local/nginx/sbin
./nginx	-s stop