1 创建OpenSSL自签名证书
1.1 概述
本节简单地展示了SSL的实现原理和证书在整个SSL过程中扮演的角色。
普通的WEB以非加密的形式传输数据。这意味着任何人都能够通过嗅探器窥测到所有的数据。显然,这是一个问题,特别是对安全和隐私有高要求的数据,例如:信用卡数据和银行事务数据。安全套接层用于加密WEB服务器和WEB客户端(浏览器)之间传输的数据流。
SSL使用所谓的非对称加密技术,通常也称之为公钥加密(PKI)。使用公钥加密,需要创建一个公钥和一个私钥。使用一个密钥加密的数据,只能被另一个密钥解密。使用服务器的私钥进行加密的消息和数据流,只能使用对应的公钥进行解密,这样就能保证客户端收到的数据只来自于特定的服务器。
如果SSL使用公钥加密技术加密传输的数据流,为什么还需要一个证书呢?从技术上来讲,证书并不是必需的,因为数据已经被加密,并且很难被第三方解密。尽管如此,证书在通信过程中确实扮演了一个重要的角色。由可信的证书认证机构签名的证书,能够确保证书持有者确实具有他声明的身份。如果没有可信的签名证书,你的数据也会被加密,但是,你通信的机构也许并非你所认为的机构。没有证书,假冒攻击会更加普遍。
1.2 步骤1:生成私钥
openssl工具箱既能够用于生成RSA私钥和CSR(证书签名请求),也能用于生成自签名的证书(主要用于测试和内部使用)。
第一步生成RSA私钥。RSA私钥是一个1024位的RSA密钥,使用Triple-DES加密,以PEM格式存储,这样该私钥就是一个可读的ASCII文本。生成RSA私钥命令行如下:
$ opensslgenrsa -des3 -out localhost_server.key 1024
GeneratingRSA private key, 1024 bit long modulus
..............................................................................++++++
.++++++
e is 65537(0x10001)
Enter passphrase for localhost_server.key:changeit
Verifying - Enter pass phrase for localhost_server.key:changeit
1.3 步骤2:生成CSR(证书签名请求)
一旦生成了私钥,就可以生成证书签名请求了。CSR有两种使用方式。理想情况下,将CSR发送给Thawte或Verisign等证书认证机构,证书认证机构将会验证请求者的身份并签署一个签名的证书。第二种方式是自签名CSR,这个将在1.5节进行演示。
在CSR的生成过程中,你需要输入一些信息。这些信息是证书的X.509属性。其中一个信息是“Common Name(例如你的名字)”。该信息最好填入受保护服务器的完全限定域名。如果受保护的站点是https://public.akadia.com,那么该信息填入public.akadia.com。生成CSR的命令行如下:
$ openssl req -new -key localhost_server.key -out localhost_server.csr