如何创建一个自签名的SSL(安全套接字层)证书

2015/03/18

普通的网络流量在互联网上是未经过加密而传输的。因此,任何人如果拥有适合的工具可以窥探这些数据。显然的,这将导致很多问题,特别是安全性和保密性的数据,如信用卡数据和银行交易。安全套接字层(SSL)目的是对在web服务器和web客户端(浏览器)之间传输的数据进行加密。

SSL使用的是非对称加密法,通常被称为公钥加密(PKI)。有了公钥加密,2对秘钥将被创建,一个是公有的,而另一个是私有的。任何数据使用这两个其中一个秘钥,只能与对应的秘钥解密。因此,如果一个消息或数据流是使用服务器的私钥加密的话,那么只能使用其相应的公钥解密,确保该数据只来自服务器。

如果SSL利用公钥加密法来加密在网上传输的数据流,那为什么证书是必要的呢?技术性的答案是,证书不是真的有必要的。该数据是安全的,不能轻易被第三方解密。然而,证书却在通信过程中扮演着重要的角色。证书是由受信任的证书颁发机构(CA)所签署的,确保证书的持有者是真的。如果没有一个可信的签名证书,您的数据可能会被加密,但是,您通信的一方就未必是您想要的。没有证书,假冒攻击将更加普遍。

步骤一:生成私钥

OpenSSL工具包被用于生成RSA私钥和CSR(证书签名请求)。它也可以被用来申请用于测试或内部使用的自签名证书。

第一步是创建您的RSA私钥。这私钥是1024位的RSA秘钥,使用三重DES加密,并存储在PEM格式,以便可以以ASCII读取.

openssl genrsa -des3 -out server.key 1024
Generating RSA private key, 1024 bit long modulus
…………………………………………………++++++
……..++++++
e is 65537 (0x10001)
Enter PEM pass phrase:
Verifying password – Enter PEM pass phrase:

步骤二:生成CSR(证书签名请求)

一旦生成私钥,那么证书签名求也就可以被产生。CSR可以以其中两种方式之一使用。在理想的情况下,CSR将被发送到证书颁发机构,如科摩多,以验证请求者的身份并发出签署的证书。而第二个选项是,自签名CSR,我将在下一节解释有关证书。

在生成CSR过程中,您会被要求提示输入多条信息。这些都是X.509的属性。其中一个提示是“通用名称”(如:您的名字)。重要的是这字段您必须输入一个您受SSL保护服务器的完全合格域名。如果您要保护的网站是https://public,akadia.com,请输入public.akadia.com。该生成CSR的命令如下:

openssl req -new -key server.key -out server.csr
Country Name (2 letter code) [GB]:US
State or Province Name (full name) [Berkshire]: New York
Locality Name (eg, city) [Newbury]: New York
Organization Name (eg, company) [My Company Ltd]:Akadia AG
Organizational Unit Name (eg, section) []:Information Technology
Common Name (eg, your name or your server’s hostname) []:public.akadia.com
Email Address []:alex@example.com
Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

步骤3:从秘钥中删除口令:

私钥口令的副作用是,每当web服务器启动时,Apace将压球您输入密码短语。显然的,这肯定带来不方便,因为不是每次启动(重启或崩溃后)时都有人在一旁输入密码短语。Mod_ssl包括使用外部程序的能力来代替内置的通行短语。然而,这并不是最安全的选择。所以需要从秘钥中删除该三重DES加密,从而不需要输入密码短语。如果私钥不再被加密,重要的是该文件只能被根用户读取。如果您的系统曾经被破坏,第三方获得您未加密的私钥,那么响应的证书需要被撤销。请使用以下命令从秘钥中删除密码短语:

cp server.key server.key.org
openssl rsa -in server.key.org -out server.key

新创建的服务器秘钥文件已经没有密码短语了

-rw-r–r– 1 root root 745 Jun 29 12:19 server.csr
-rw-r–r– 1 root root 891 Jun 29 13:22 server.key
-rw-r–r– 1 root root 963 Jun 29 13:22 server.key.org

步骤4:生成自签名证书

这步骤您将需要生成自签名证书,因为您要么没有计划要让证书由CA签署,或者当CA在签署您的证书是,您希望测试您新SSL实现。这临时证书将在客户端浏览器生成错误,因为签署证书颁发机构是不被信任的。

要生成一个临时证书,请发出以下命令

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Signature ok

subject=/C=US/ST=New York/L=New York/O=Akadia AG/OU=Information

Technology/CN=public.akadia.com/Email=alex@example.com

Getting Private key

步骤5:安装私钥和证书

当安装带有mod_ssl的Apache后,它将创建几个目录在Apache的配置目录中。该目录的位置将按Apache的编译而有所不同

cp server.crt /usr/local/apache/conf/ssl.crt

cp server.key /usr/local/apache/conf/ssl.key

步骤6:配置启用SSL的虚拟主机

SSLEngine on

SSLCertificateFile /usr/local/apache/conf/ssl.crt/server.crt

SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/server.key

SetEnvIf User-Agent “.*MSIE.*” nokeepalive ssl-unclean-shutdown

CustomLog logs/ssl_request_log \

   “%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \”%r\” %b”

步骤7:重启Apache和测试

/etc/init.d/httpd stop

/etc/init.d/httpd stop

 

https://public.akadia.com

Tags:

Write a comment

Name
Comment