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 ./nginx2、停止nginx服务
cd /usr/local/nginx/sbin ./nginx -s stop