第一步:先建立一个 CA 的证书

首先为 CA 创建一个 RSA 私用密钥,

[root@rocketcnvm ssl]#openssl genrsa -des3 -out ca.key 1024

系统提示输入 PEM pass phrase,也就是密码,输入后牢记它。

生成 ca.key 文件,将文件属性改为400,并放在安全的地方。

[root@rocketcnvm ssl]#chmod 400 ca.key

你可以用下列命令查看它的内容,

[root@rocketcnvm ssl]# openssl rsa -noout -text -in ca.key

利用 CA 的 RSA 密钥创建一个自签署的 CA 证书(X.509结构)

[root@rocketcnvm ssl]#openssl req -new -x509 -days 3650 -key ca.key -out ca.crt

然后需要输入下列信息:

Country Name: cn 两个字母的国家代号

State or Province Name: An Hui 省份名称

Locality Name: Bengbu 城市名称

Organization Name: Family Network 公司名称

Organizational Unit Name: Home 部门名称

Common Name:distinguish  name

Email Address: sunstorm@263.net Email地址

生成 ca.crt 文件,将文件属性改为400,并放在安全的地方。

[root@rocketcnvm ssl]#chmod 400 ca.crt

你可以用下列命令查看它的内容,

[root@rocketcnvm ssl]#openssl x509 -noout -text -in ca.crt

用下面的命令也可以生成没有密码保护的CA密钥和证书文件:

[root@rocketcnvm ssl]#openssl req -new -x509 -out ca.crt -keyout ca.key

想给CA密钥加密码保护可以:

[root@rocketcnvm ssl]#openssl res -des3 -in ca.key -out ca.key.new

[root@rocketcnvm ssl]#mv ca.key.new ca.key

第二步:下面要创建服务器证书签署请求,

首先为你的 Apache 创建一个 RSA 私用密钥:

[root@rocketcnvm ssl]#openssl genrsa -des3 -out server.key 1024

这里也要设定pass phrase。

生成 server.key 文件,将文件属性改为400,并放在安全的地方。

[root@rocketcnvm ssl]#chmod 400 server.key

你可以用下列命令查看它的内容,

[root@rocketcnvm ssl]#openssl rsa -noout -text -in server.key

用 server.key 生成证书签署请求 CSR.

[root@rocketcnvm ssl]#openssl req -new -key server.key -out server.csr

这里也要输入一些信息,和生成ca.crt的信息类似

至于 ‘extra’ attributes 不用输入。

“Common Name: Chen Yang 你的姓名”这条信息请你输入你的服务器的域名或者IP地址,

你可以查看 CSR 的细节

[root@rocketcnvm ssl]#openssl req -noout -text -in server.csr

第三步:下面可以签署证书了

[root@rocketcnvm ssl]#openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key

就可以得到server.crt。

将文件属性改为400,并放在安全的地方。

[root@rocketcnvm ssl]#chmod 400 server.crt

检查私钥是否于证书匹配,可以使用如下命令进行对比:四 其它

[root@rocketcnvm ssl]# openssl rsa -noout -modulus -in ca.key | openssl md5

Enter pass phrase for ca.key:

86e24bf0156116c4f6617a8d980b3acd

[root@rocketcnvm ssl]# openssl x509 -noout -modulus -in ca.crt | openssl md5

86e24bf0156116c4f6617a8d980b3acd


补充

在CentOS6.3环境下,openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key,无法生效。改成openssl x509 -days 3650 -req -in server.csr -signkey server.key -out server.crt即可

上面生成的证书有效期为10年(呵呵太长了点,一般三年就行了)

这时证书的相关文件就都已经生成好了。当前文件夹下应该有server.crt、server.csr、server.key这三个文件。

如果你是个完美论者,理所当然应该把文件丢到证书的“官方目录”中去,省的把文件胡乱放置以后找不着:

[root@www ~]# mv server.crt /etc/pki/tls/certs/

[root@www ~]# mv server.key /etc/pki/tls/private/

最后仅仅需要修改配置文件来指定证书路径:

找到如下一节:

# Server Certificate:
# Point SSLCertificateFile at a PEM encoded certificate. If
# the certificate is encrypted, then you will be prompted for a
# pass phrase. Note that a kill -HUP will prompt again. A new
# certificate can be generated using the genkey(1) command.
SSLCertificateFile /etc/pki/tls/certs/server.crt

# Server Private Key:
# If the key is not combined with the certificate, use this
# directive to point at the key file. Keep in mind that if
# you’ve both a RSA and a DSA private key you can configure
# both in parallel (to also allow the use of DSA ciphers, etc.)
SSLCertificateKeyFile /etc/pki/tls/private/server.key

另外,在/etc/httpd/conf.d/ssl.conf里面将SSLPassPhraseDialog builtin修改为

SSLPassPhraseDialog exec:/etc/httpd/key.sh

编辑:/ect/apache2/key.sh

#!/bin/bash

echo ‘your pass phrase’ //在单引号里输入你的Server.key的密码

注意key.sh的权限755

重启Apache服务

这样每次启动apache时都可以不需要输入Server.key的密码了。

作者 龙飞