05.SSL或TTL应用编程
5.1 Programming with SSL
从这一点上,我们将弥合差距到更高级的OpenSSL功能。 本章的目的是将图书馆的特征分成较小的群体,以建立一个过程的感觉。 我们希望这个过程可以作为开发者在自己的应用中实现SSL的模板。 在将SSL添加到应用程序中时,必须考虑应用程序的独特要求,并且必须对安全性和功能性做出最佳决策。
以下步骤为开发人员在实施SSL客户端或服务器时提供了一个模板。 我们将从一个小例子开始,并以此为基础。 直到所有的步骤都被认真考虑,这个例子对我们的满意是不安全的。 在每一步中,我们将介绍一小剂量的API; 在所有步骤之后,开发人员应该能够更清楚地思考启用SSL的应用程序的设计。 然而,完成这些步骤并不是路的尽头。 为了解决许多应用程序的需求,我们需要进一步研究API的高级功能。
5.1.2.1 Background
通常,服务器应用程序应始终向对等方提供证书,客户端可以选择这样做。 应用程序的目的和期望的安全性应决定是否使用客户端证书。OpenSSL在握手期间向客户端提交客户端证书,只要我们为客户端分配证书,服务器请求客户端证书。
Generating the Files Needed by the Examples
a.To create the root CA:
$openssl req -newkey rsa:1024 -sha1 -keyout rootkey.pem -out rootreq.pem
$ openssl x509 -req -in rootreq.pem -sha1 -extfile myopenssl.cnf > -extensions v3_ca -signkey rootkey.pem -out rootcert.pem
$ cat rootcert.pem rootkey.pem > root.pem
$ openssl x509 -subject -issuer -noout -in root.pem
subject= /C=US/ST=VA/L=Fairfax/O=Zork.org/CN=Root CA
issuer= /C=US/ST=VA/L=Fairfax/O=Zork.org/CN=Root CA
b.To create the server CA and sign it with the root CA:
$ openssl req -newkey rsa:1024 -sha1 -keyout serverCAkey.pem -out > serverCAreq.pem
$ openssl x509 -req -in serverCAreq.pem -sha1 -extfile > myopenssl.cnf -extensions v3_ca -CA root.pem -CAkey root.pem > -CAcreateserial -out serverCAcert.pem
$ cat serverCAcert.pem serverCAkey.pem rootcert.pem > serverCA.pem
$ openssl x509 -subject -issuer -noout -in serverCA.pem
subject= /C=US/ST=VA/L=Fairfax/O=Zork.org/OU=Server
Division/CN=Server CA
issuer= /C=US/ST=VA/L=Fairfax/O=Zork.org/CN=Root CA
c.To create the server's certificate and sign it with the Server CA
$ openssl req -newkey rsa:1024 -sha1 -keyout serverkey.pem -out > serverreq.pem
$ openssl x509 -req -in serverreq.pem -sha1 -extfile myopenssl.cnf > -extensions usr_cert -CA serverCA.pem -CAkey serverCA.pem > -CAcreateserial -out servercert.pem
$ cat servercert.pem serverkey.pem serverCAcert.pem rootcert.pem > > server.pem
$ openssl x509 -subject -issuer -noout -in server.pem
subject= /C=US/ST=VA/L=Fairfax/O=Zork.org/CN=splat.zork.org
issuer= /C=US/ST=VA/L=Fairfax/O=Zork.org/OU=Server
Division/CN=Server CA
d.To create the client certificate and sign it with the Root CA
$ openssl req -newkey rsa:1024 -sha1 -keyout clientkey.pem -out > clientreq.pem
$ openssl x509 -req -in clientreq.pem -sha1 -extfile myopenssl.cnf > -extensions usr_cert -CA root.pem -CAkey root.pem > -CAcreateserial -out clientcert.pem
$ cat clientcert.pem clientkey.pem rootcert.pem > client.pem
$ openssl x509 -subject -issuer -noout -in client.pem
subject= /C=US/ST=VA/L=Fairfax/O=Zork.org/CN=shell.zork.org
issuer= /C=US/ST=VA/L=Fairfax/O=Zork.org/CN=Root CA
e.To create dh512.pem and dh1024.pem:
$ openssl dhparam -check -text -5 512 -out dh512.pem
$ openssl dhparam -check -text -5 1024 -out dh1024.pem
5.1.3 Step 2: Peer Authentication
启用SSL的程序的安全性由于未能正确验证对等证书而受到损害。 在这一步中,我们将研究处理可信证书,证书链验证,CRL使用和连接后验证的各种API调用。
下载CA证书使用
SSL_CTX_set_default_verify_paths和 SSL_CTX_load_verify_locations函数
5.1.3.3 Certificate verification
SSL_CTX_set_verify
X509_STORE *SSL_CTX_get_cert_store(SSL_CTX *ctx);
5.1.4 Step 3: SSL Options and Cipher Suites
5.2.1 SSL Session Caching
SSL会话与SSL连接不同。 会话是指通过执行握手而创建的一组参数和加密密钥,而连接是使用会话的活动会话。 换言之,连接是指通信的过程,而会话是指通信所建立的参数。 了解这一点,我们可以深入研究一些提供SSL会话缓存的OpenSSL例程。
业务流程:
5.2.1.3 An on-disk, session caching framework
5.2.2.3 Non-blocking I/O
5.2.3 SSL Renegotiations
SSL重新协商本质上是一个连接期间的SSL握手。