您所在的位置:读书频道 > 操作系统 > Linux > 18.6 建立SSL(HTTPs)网站

18.6 建立SSL(HTTPs)网站

2007-12-06 17:44 鸟哥 机械工业出版社华章公司 字号:T | T
一键收藏,随时查看,分享好友!

《鸟哥的Linux私房菜——服务器架设篇》(第二版)第18章的主要介绍的是WWW服务器。本文主要介绍的是建立SSL(HTTPs)网站。

AD:

18.6  建立SSL(HTTPs)网站

了解了一堆Apache的功能之后,您要知道Apache的这个HTTP传输协议是“明码传送”的,也就是说,如果您的数据在Internet上运行的时候被监听,那您的数据就泄露了。例如,我们通过“.htaccess”来加密保护,但是您使用浏览器的时候,还是需要输入账号密码,这个数据也许在传输的时候会被窃取。

那怎么办?上文曾谈过,HTTPs是利用SSL来加密传输的,这个传输的方式很像SSH的联机方式,通过Public Key与Private Key这一对Key Pair来加解密。

不过,与SSH不同的是,SSL通常是管理员本身就允许某些人来登录使用的,而客户端也是有特殊需求才会到该主机,所以Public Key的建置直接由服务器来管理即可。WWW服务器就不一样了,因为WWW服务器提供的数据是给Internet上所有的人浏览的,为了保护浏览者的机密数据,WWW服务器的Public Key有必要经过第三方公正单位的验证,如此一来客户端才能确保这台WWW服务器是安全的。

所以,Apache加上SSL并提供公正单位(Certificate Authorities,简称CA)注册所得的凭证,是建立您自己WWW服务器具有公信力的一个方式。不过,因为向CA单位注册是需要钱的,所以除非您的WWW服务器真的是应用在商业行为上,否则并不需要向CA注册申请凭证。如果我想要建立加密的网页(HTTPs),怎么注册我的Public Key?没关系,可以“向自己注册”。只是如此一来,除非客户端相信您的主机,否则通常对方可能会拒绝联机。

那如何实现上述的功能呢?可进行如下操作:

• 先以类似openssl的指令制作出一把Public Key。
• 将这把key向本机注册(您也可以向CA单位注册)。
• 设置Apache,让注册的凭证可以生效。
• 可以限制某些目录只能由HTTPs来进行联机浏览。

那如何实现上述操作呢?事实上CentOS 4.x已经利用mod_ssl帮我们制作好key以及凭证,您只要安装好这个模块即可发现以下内容。

· /etc/httpd/conf.d/ssl.conf:提供给Apache读取的配置文件。
· /etc/httpd/conf/ssl.csr/Server.csr:用来申请凭证的文件(Certificate Signing Request)。
· /etc/httpd/conf/ssl.crt/Server.crt:凭证文件。
· /etc/httpd/conf/ssl.key/Server.key:Public Key。

如果要向CA单位申请凭证,就需要制作出ssl.csr文件,然后CA单位审核通过后会给您一个 *.crt的文件,那就是凭证。不过因为我们是向自己注册,所以只需要ssl.key以及ssl.crt这两个文件即可,而这两个文件都是由openssl指令制作出来的。

1. 测试CentOS 4.x所提供的凭证

先确定已经安装了mod_ssl,如果还没有安装,请使用yum install mod_ssl安装。然后重新启动Apache,接下来就能够测试了。使用浏览器连接到您的主机上,记得使用的网址是“https://your.hostname/”。而后将弹出如图18-12所示界面。

图18-12 CentOS默认凭证

凭证不成功怎么办?没办法,因为这个凭证并非向CA单位注册。如果您确认这个凭证是OK的,那您可以选中“永久接受此凭证”单选按钮,以后再进入这个网站时就不会出现此警告信息。如果只是这次想要联机,那就选中“此次连接接受此凭证”单选按钮,不然就不能接收了。当然,您也单击“检查证书”按钮查看此凭证,如图18-13所示。
图18-13 CentOS默认凭证

如果不在乎认证的信息,那么此时您的HTTPs传输协议就可以了,不需要向下继续处理。如果想要提供自己主机的认证凭证,那就继续向下操作吧。

2. 建立自己主机的凭证

如果您想要拥有自己的凭证,那就需要做出自己主机的Public Key以及凭证文件。

(1)建立Public Key

Public Key是放置在/etc/httpd/conf/ssl.key目录下的,整个建立的方法非常简单:

# 先将旧的文件备份下来
[root@linux ~]# cd /etc/httpd/conf/ssl.key
[root@linux ssl.key]# mv Server.key Server.key.raw

# 开始制作新的Public Key
[root@linux ssl.key]# openssl [操作] -out filename [bits]
参数说明:
[操作],主要的操作有如下两个。
        genrsa,建立RSA加密的Public Key
        req,建立凭证要求文件或者是凭证文件
-out,后面加上输出的文档名,就是那把key name
bits,用在genrsa加密的公钥长度
-x509,X.509 Certificate Data Management.,一种验证的管理方式

建立一支长度为1024 bits的Public Key,注意文件名
[root@linux ssl.key]# openssl genrsa -out Server.key 1024
Generating RSA private key, 1024 bit long modulus
...................................................++++++
..........++++++
e is 65537 (0x10001)

(2)建立凭证文件

凭证文件是放置到/etc/httpd/conf/ssl.crt目录下的,所以您应该这样做:

[root@linux ssl.crt]# mv Server.crt Server.crt.raw
[root@linux ssl.crt]# openssl req -new -x509 -key ../ssl.key/Server.key \
> -out Server.crt
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:TW
State or Province Name (full name) [Berkshire]:Taiwan
Locality Name (eg, city) [Newbury]:Tainan
Organization Name (eg, company) [My Company Ltd]:VBird
Organizational Unit Name (eg, section) []:VBird
Common Name (eg, your name or your Server's hostname) []:linux.vbird.tsai
E-mail Address []:vbird@linux.vbird.tsai

因为注册的时候需要填写很多数据,上面就是在输入您的数据。如果输入的数据都是正确的,就可以开始设置Apache的支持了。

(3)设置Apache的支持

其实mod_ssl提供的/etc/httpd/conf.d/ssl.conf已经足够。在该文件中比较重要的是以下这些信息:

[root@linux ~]# vi /etc/httpd/conf.d/ssl.conf
Listen 443

#DocumentRoot "/var/www/html"
#ServerName www.example.com:443
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
SSLCertificateFile /etc/httpd/conf/ssl.crt/Server.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/Server.key


参数:
Listen,监听的端口,这是默认值,最好不要改
SSLEngine,是否支持SSL,要设成On
SSLCipherSuite,允许Client端的联机要求机制
SSLCertificateFile,凭证文件
SSLCertificateKeyFile,Public Key

[root@linux ~]# apachectl restart

上述代码使用默认值即可。接下来就可以检查您的凭证了。同样在浏览器的地址栏中通过https输入网址,结果如图18-14所示。

图18-14 CentOS默认凭证

3. 将HTTP与HTTPs的网页分开

刚刚处理的是Apache的SSL,也就是说原本的WWW资料可以分别使用HTTP及HTTPs来浏览。那可不可以将这两个传输协议分开呢?例如,主网页在/var/www/html下面,但HTTPs则仅能在/var/www/www目录中?当然是可以的,同样利用虚拟主机来处理即可。很简单。

[root@linux ~]# vi /etc/httpd/conf.d/ssl.conf
# 找到下面这两行,并且将其修改
DocumentRoot "/var/www/www"
ServerName *:443    <==任何主机名称都是到上述的目录去

[root@linux ~]# apachectl restart

【责任编辑:董书 TEL:(010)68476606】

回书目   上一节   下一节

分享到:

  1. Linux服务器配置全程实录
  2. 揭秘--优秀PPT这样制作

热点职位

更多>>

热点专题

更多>>

读书

黑客入侵的主动防御
本书是一本非常全面地讲述黑客入侵主动防御技术的网络安全工具书。本书的重点是介绍黑客的攻击手段和提供相应的主动防御保护措施

51CTO旗下网站

领先的IT技术网站 51CTO 中国首个CIO网站 CIOage 中国首家数字医疗网站 HC3i 51CTO学院