apache服务器启用SSL/TLS的一般方法

在OpenBSD环境下搭建各种服务器的相关讨论。

版主: lionuxchenjun天地乾坤

回复
头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

apache服务器启用SSL/TLS的一般方法

帖子 leo » 2010-11-27 11:00

一般要让apcahe启用 SSL/TLS 功能,最常用的方法是创建一个服务器的证书,这个证书由你的主机产生作为客户端创建新连接时的一个身份证明。这个证书保存在 /etc/ssl 目录, keys保存在 /etc/ssl/private 目录。
私钥(private keys)可以用3DES和一个passphrase来保护其完整性,但是很重要的一点是如果存在加密服务器的keys, 每次启动服务器时就都需要输入passphrase。如果未使用passphrase, 则你必须绝对确保你的keys文件的安全性。

为web服务器创建RSA证书
要在httpd(8)里支持https通讯,你必须创建一个RSA证书。

代码: 全选

# openssl genrsa -out /etc/ssl/private/server.key 1024
或者你可能希望这个key带有一个passphrase, 这样在每次启动服务器时都需要输入这个passphrase

代码: 全选

# openssl genrsa -des3 -out /etc/ssl/private/server.key 1024
接下来是生成一个证书签名请求(Certificate Signing Request), 它的用途是从认证机构(CA)获取一份对证书的签署,输入如下的命令:

代码: 全选

# openssl req -new -key /etc/ssl/private/server.key \
   -out /etc/ssl/private/server.csr
这里的 server.csr 文件到时候可以提供给签署这个key的证明机构。
你也可以自己签署这个key, 使用下面的命令:

代码: 全选

# openssl x509 -req -days 365 -in /etc/ssl/private/server.csr \
   -signkey /etc/ssl/private/server.key -out /etc/ssl/server.crt
当你具备了 /etc/ssl/server.crt 和 /etc/ssl/private/server.key 这两个文件,就可以用-DSSL参数启动httpd服务了,也就是在你的机器上的443端口上启用https通讯。

即便你可能在不久后获得由其它认证结构颁发的签署证明,你也可能想先按照上面的方法创建一个自己签署证书以便测服务器的功能;这样在获得了其他机构签署的证书时再替换掉 /etc/ssl/server.crt文件,然后重新启动httpd(8)。

为web服务器创建DSA证书
创建一个DSA证书包含几个步骤,首先,用下列命令生成一个DSA参数组

代码: 全选

 # openssl dsaparam 1024 -out dsa1024.pem
这将以1024 bit的 DSA keys 生成DSA参数,然后将它们保存到 dsa1024.pem 文件。
一旦你生成了DSA参数,你可以用下列命令生成一个证书和未加密的私钥的key:

代码: 全选

# openssl req -x509 -nodes -newkey dsa:dsa1024.pem \
   -out /etc/ssl/dsacert.pem -keyout /etc/ssl/private/dsakey.pem
要生成一个加密的私钥key,你可以用:

代码: 全选

# openssl req -x509 -newkey dsa:dsa1024.pem \
  -out /etc/ssl/dsacert.pem -keyout /etc/ssl/private/dsakey.pem


上面是说明,下面我们实际操作一下

1. RSA证书
我们先创建一个RSA证书

代码: 全选

# openssl genrsa -out /etc/ssl/private/server.key 1024
Generating RSA private key, 1024 bit long modulus
.....++++++
...............++++++
e is 65537 (0x10001)
接下来是生成一个证书签署请求

代码: 全选

# openssl req -new -key /etc/ssl/private/server.key \
>    -out /etc/ssl/private/server.csr
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) []:CN
State or Province Name (full name) []:BeiJing
Locality Name (eg, city) []:BeiJing
Organization Name (eg, company) []:gobsd.org
Organizational Unit Name (eg, section) []:gobsd.org
Common Name (eg, fully qualified host name) []:gobsd.org
Email Address []:who@gobsd.org
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:123456
An optional company name []:
#
请求没有那么快回复,我们先来创建一个自签名证书,

代码: 全选

# openssl x509 -req -days 365 -in /etc/ssl/private/server.csr -signkey /etc/ssl/private/server.key -out /etc/ssl/server.crt
Signature ok
subject=/C=CN/ST=BeiJing/L=BeiJing/O=gobsd.org/OU=gobsd.org/CN=gobsd.org/emailAddress=who@gobsd.org
Getting Private key
下面看看两个文件是否存在:

代码: 全选

# ls /etc/ssl/server.crt
/etc/ssl/server.crt
# ls /etc/ssl/private/server.key
/etc/ssl/private/server.key
#
好的,两个文件都存在,所以我们可以开始设置apache服务器的自动启动了,编译一下 /etc/rc.conf.local文件,加上如下的内容。.

代码: 全选

httpd_flags="-DSSL"
重新启动计算机来验证一下:

代码: 全选

reboot

浏览器里输入服务器地址http://192.168.8.13(访问80端口):
图片
然后在浏览器里输入https://192.168.8.13(访问443端口):
图片
IE提示你这不是一个来自有效结构的证书,无视,直接点击继续:
图片

为web服务器创建DSA证书
DSA的证书创建过程类似于RSA,但是需要提醒大家的是: 你在IE里浏览时可能会看见这样的画面
图片
怎么说呢,自己判别吧,应该是微软不承认这种自由的认证方式。不过没有问题,你的通讯已经被OpenSSL加密了,比裸奔强很多了。

此外用过虚拟主机的朋友应该知道,凡是需要ssl访问的都需要单独加银子,即使是仅提供OpenSSL至少每个月4-6$吧。

回复

在线用户

正浏览此版面之用户: 没有注册用户 和 24 访客