一,什么是ssl
SSL证书通过在客户端浏览器和Web服务器之间建立一条SSL安全通道(Secure socket layer(SSL)安全协议是由Netscape Communication公司设计开发。该安全协议主要用来提供对用户和服务器的认证;对传送的数据进行加密和隐藏;确保数据在传送中不被改变,即数据的完整性,现已成为该领域中全球化的标准。由于SSL技术已建立到所有主要的浏览器和WEB服务器程序中,因此,仅需安装服务器证书就可以激活该功能了)。即通过它可以激活SSL协议,实现数据信息在客户端和服务器之间的加密传输,可以防止数据信息的泄露。保证了双方传递信息的安全性,而且用户可以通过服务器证书验证他所访问的网站是否是真实可靠。
安全套接字层 (SSL) 技术通过加密信息和提供鉴权,保护您的网站安全。一份 SSL 证书包括一个公共密钥和一个私用密钥。公共密钥用于加密信息,私用密钥用于解译加密的信息。浏览器指向一个安全域时,SSL 同步确认服务器和客户端,并创建一种加密方式和一个唯一的会话密钥。它们可以启动一个保证消息的隐私性和完整性的安全会话。 首先要有一个主证书,然后用主证书来签发服务器证书和客户证书,服务器证书和客户证书是平级关系,SSL所使用的证书可以自己生成,也可以通过一个商业性CA(如Verisign 或 Thawte)签署证书。签发证书的问题:如果使用的是商业证书,具体的签署方法请查看相关销售商的说明;如果是知己签发的证书,可以使用openssl 自带的CA.sh脚本工具。如果不为单独的客户端签发证书,客户端证书可以不用生成,客户端与服务器端使用相同的证书。 二,安装所要的软件
三,安装
在正式安装前,请不要直接看下面的安装,请看最后一部分,那是我安装时候所遇到的问题,这样可以使你少走不少弯路,我安装的时候,就走了不少弯路。
1,安装openssl
tar zxvf openssl-1.0.0a.tar.gz
cd openssl-1.0.0a
./config --prefix=/usr/local/openssl
make && make install 2,安装apache
tar zxvf httpd-2.2.16.tar.gz
cd httpd-2.2.16
./configure --prefix=/usr/local/apache --enable-ssl --enable-rewrite --enable-so --with-ssl=/usr/local/openssl
make && make install 如果你是yum install ,apt-get,pacman这样的软件管理工具进行安装的话,上面的二步可以省掉。 3,创建主证书
在/usr/local/apache/conf/下面建个目录ssl 3.1,mkdir ssl 3.2,cp /openssl的安装目录/ssl/misc/CA.sh /usr/local/apache/conf/ssl/ 3.3 用CA.sh来创建证书 - 一,什么是ssl
- SSL证书通过在客户端浏览器和Web服务器之间建立一条SSL安全通道(Secure socket layer(SSL)安全协议是由Netscape Communication公司设计开发。该安全协议主要用来提供对用户和服务器的认证;对传送的数据进行加密和隐藏;确保数据在传送中不被改变,即数据的完整性,现已成为该领域中全球化的标准。由于SSL技术已建立到所有主要的浏览器和WEB服务器程序中,因此,仅需安装服务器证书就可以激活该功能了)。即通过它可以激活SSL协议,实现数据信息在客户端和服务器之间的加密传输,可以防止数据信息的泄露。保证了双方传递信息的安全性,而且用户可以通过服务器证书验证他所访问的网站是否是真实可靠。
- 安全套接字层 (SSL) 技术通过加密信息和提供鉴权,保护您的网站安全。一份 SSL 证书包括一个公共密钥和一个私用密钥。公共密钥用于加密信息,私用密钥用于解译加密的信息。浏览器指向一个安全域时,SSL 同步确认服务器和客户端,并创建一种加密方式和一个唯一的会话密钥。它们可以启动一个保证消息的隐私性和完整性的安全会话。
- 首先要有一个主证书,然后用主证书来签发服务器证书和客户证书,服务器证书和客户证书是平级关系,SSL所使用的证书可以自己生成,也可以通过一个商业性CA(如Verisign 或 Thawte)签署证书。签发证书的问题:如果使用的是商业证书,具体的签署方法请查看相关销售商的说明;如果是知己签发的证书,可以使用openssl 自带的CA.sh脚本工具。如果不为单独的客户端签发证书,客户端证书可以不用生成,客户端与服务器端使用相同的证书。
- 二,安装所要的软件
- openssl :wget http://www.openssl.org/source/openssl-1.0.0a.tar.gz
- apache: wget http://www.apache.org/dist/httpd/httpd-2.2.16.tar.gz
- 三,安装
- 在正式安装前,请不要直接看下面的安装,请看最后一部分,那是我安装时候所遇到的问题,这样可以使你少走不少弯路,我安装的时候,就走了不少弯路。
- 1,安装openssl
- tar zxvf openssl-1.0.0a.tar.gz
- cd openssl-1.0.0a
- ./config --prefix=/usr/local/openssl
- make && make install
- 2,安装apache
- 如果你已经安装了apache,你又不想重新编译的话,请参考mod_ssl模块的安装,也就是添加ssl模块而已。
- tar zxvf httpd-2.2.16.tar.gz
- cd httpd-2.2.16
- ./configure --prefix=/usr/local/apache --enable-ssl --enable-rewrite --enable-so --with-ssl=/usr/local/openssl
- make && make install
- 如果你是yum install ,apt-get,pacman这样的软件管理工具进行安装的话,上面的二步可以省掉。
- 3,创建主证书
- 在/usr/local/apache/conf/下面建个目录ssl
- 3.1,mkdir ssl
- 3.2,cp /openssl的安装目录/ssl/misc/CA.sh /usr/local/apache/conf/ssl/
- 3.3 用CA.sh来创建证书
复制代码安装成功的话,会在ssl目录下面产生一个文件夹demoCA 4 生成服务器私钥和服务器证书- <div class="dp-highlighter"><ol class="dp-c" start="1"><li class="alt">[root@BlackGhost ssl]# openssl genrsa -des3 -out server.key 1024 <span class="comment">//产生服务器私钥</span> </li><li class="">Generating RSA <span class="keyword">private</span> key, 1024 bit long modulus </li><li class="alt">.....................++++++ </li><li class="">.........++++++ </li><li class="alt">e is 65537 (0x10001) </li><li class="">Enter pass phrase <span class="keyword">for</span> server.key: </li><li class="alt">Verifying - Enter pass phrase <span class="keyword">for</span> server.key: </li><li class="">[root@BlackGhost ssl]# openssl req -<span class="keyword">new</span> -key server.key -out server.csr <span class="comment">//生成服务器证书</span> </li><li class="alt">Enter pass phrase <span class="keyword">for</span> server.key: </li><li class="">You are about to be asked to enter information that will be incorporated </li><li class="alt">into your certificate request. </li><li class="">What you are about to enter is what is called a Distinguished Name <span class="keyword">or</span> a DN. </li><li class="alt">There are quite a few fields but you can leave some blank </li><li class="">For some fields there will be a <span class="keyword">default</span> value, </li><li class="alt">If you enter <span class="string">'.'</span>, the field will be left blank. </li><li class="">----- </li><li class="alt">Country Name (2 letter code) [AU]:cn </li><li class="">State <span class="keyword">or</span> Province Name (full name) [Some-State]:cn </li><li class="alt">Locality Name (eg, city) []:cn </li><li class="">Organization Name (eg, company) [Internet Widgits Pty Ltd]:cn </li><li class="alt">Organizational Unit Name (eg, section) []:cn </li><li class="">Common Name (eg, YOUR name) []:localhost <span class="comment">//要填全域名</span> </li><li class="alt">Email Address []:xtaying@gmail.com </li><li class=""> </li><li class="alt">Please enter the following <span class="string">'extra'</span> attributes </li><li class="">to be sent with your certificate request </li><li class="alt">A challenge password []:***************** </li><li class="">An optional company name []: </li></ol><div></div></div>
- <p>4.1 对产生的服务器证书进行签证</p>
- <p><strong>cp server.csr newseq.pem</strong></p>
- <div class="dp-highlighter"><div class="bar"><div class="tools"><a href="http://blog.51yip.com/apachenginx/958.html#">查看</a><a href="http://blog.51yip.com/apachenginx/958.html#">复制</a><a href="http://blog.51yip.com/apachenginx/958.html#">打印</a><a href="http://blog.51yip.com/apachenginx/958.html#">?</a></div></div><ol class="dp-c" start="1"><li class="alt">[root@BlackGhost ssl]# ./CA.sh -sign <span class="comment">//为服务器证书签名</span> </li><li class="">Using configuration from /etc/ssl/openssl.cnf </li><li class="alt">Enter pass phrase <span class="keyword">for</span> ./demoCA/<span class="keyword">private</span>/cakey.pem: </li><li class="">Check that the request matches the signature </li><li class="alt">Signature ok </li><li class="">Certificate Details: </li><li class="alt"> Serial Number: </li><li class=""> 89:11:9f:a6:ca:03:63:ac </li><li class="alt"> Validity </li><li class=""> Not Before: Aug 7 12:39:41 2010 GMT </li><li class="alt"> Not After : Aug 7 12:39:41 2011 GMT </li><li class=""> Subject: </li><li class="alt"> countryName = cn </li><li class=""> stateOrProvinceName = cn </li><li class="alt"> localityName = cn </li><li class=""> organizationName = cn </li><li class="alt"> organizationalUnitName = cn </li><li class=""> commonName = localhost </li><li class="alt"> emailAddress = xtaying@gmail.com </li><li class=""> X509v3 extensions: </li><li class="alt"> X509v3 Basic Constraints: </li><li class=""> CA:FALSE </li><li class="alt"> Netscape Comment: </li><li class=""> OpenSSL Generated Certificate </li><li class="alt"> X509v3 Subject Key Identifier: </li><li class=""> FE:20:56:04:8E:B6:BE:3E:3A:E1:DA:A6:4A:3A:E1:16:93:1D:3F:81 </li><li class="alt"> X509v3 Authority Key Identifier: </li><li class=""> keyid:26:09:F3:D5:26:13:00:1F:3E:CC:86:1D:E4:EE:37:06:65:15:4E:76 </li><li class="alt"> </li><li class="">Certificate is to be certified until Aug 7 12:39:41 2011 GMT (365 days) </li><li class="alt">Sign the certificate? [y/n]:y </li><li class=""> </li><li class="alt">1 out of 1 certificate requests certified, commit? [y/n]y </li><li class="">Write out database with 1 <span class="keyword">new</span> entries </li><li class="alt">Data Base Updated </li><li class="">Certificate: </li><li class="alt"> Data: </li><li class=""> Version: 3 (0x2) </li><li class="alt"> Serial Number: </li><li class=""> 89:11:9f:a6:ca:03:63:ac </li><li class="alt"> Signature Algorithm: sha1WithRSAEncryption </li><li class=""> Issuer: C=cn, ST=cn, O=cn, OU=cn, CN=localhost/emailAddress=xtaying@gmail.com </li><li class="alt"> Validity </li><li class=""> Not Before: Aug 7 12:39:41 2010 GMT </li><li class="alt"> Not After : Aug 7 12:39:41 2011 GMT </li><li class=""> Subject: C=cn, ST=cn, L=cn, O=cn, OU=cn, CN=localhost/emailAddress=xtaying@gmail.com </li><li class="alt"> Subject Public Key Info: </li><li class=""> Public Key Algorithm: rsaEncryption </li><li class="alt"> Public-Key: (1024 bit) </li><li class=""> Modulus: </li><li class="alt"> 00:ce:d5:a8:df:d1:e7:ee:92:d1:d1:78:20:a9:6d: </li><li class=""> 0a:1b:f6:09:dd:13:29:ef:72:1d:17:54:dd:1c:8d: </li><li class="alt"> 28:27:69:fe:70:3b:fa:2b:a3:45:40:80:ea:0e:5b: </li><li class=""> a7:bd:40:d0:cd:bc:2c:74:03:8b:f7:6c:5e:1f:09: </li><li class="alt"> 5d:c6:8a:05:ea:b8:72:fc:79:8b:62:62:38:0b:42: </li><li class=""> 28:7e:0d:fc:e7:bb:b0:87:66:6a:b2:35:92:91:b9: </li><li class="alt"> 78:9c:b6:76:01:0b:2a:74:df:5f:a1:8b:31:61:90: </li><li class=""> 93:f9:20:db:46:59:12:2e:9b:59:c0:32:4e:92:14: </li><li class="alt"> a1:7e:52:7b:cc:02:5e:e2:45 </li><li class=""> Exponent: 65537 (0x10001) </li><li class="alt"> X509v3 extensions: </li><li class=""> X509v3 Basic Constraints: </li><li class="alt"> CA:FALSE </li><li class=""> Netscape Comment: </li><li class="alt"> OpenSSL Generated Certificate </li><li class=""> X509v3 Subject Key Identifier: </li><li class="alt"> FE:20:56:04:8E:B6:BE:3E:3A:E1:DA:A6:4A:3A:E1:16:93:1D:3F:81 </li><li class=""> X509v3 Authority Key Identifier: </li><li class="alt"> keyid:26:09:F3:D5:26:13:00:1F:3E:CC:86:1D:E4:EE:37:06:65:15:4E:76 </li><li class=""> </li><li class="alt"> Signature Algorithm: sha1WithRSAEncryption </li><li class=""> 09:a0:16:43:a2:93:11:a7:ab:f5:17:b7:36:35:84:9f:3b:37: </li><li class="alt"> 32:33:3f:93:63:b0:4c:bb:d1:b4:9b:4f:37:78:62:f4:ac:ff: </li><li class=""> 28:b0:63:71:2e:9a:7c:f4:40:2e:b1:5f:ae:49:e7:e2:6f:de: </li><li class="alt"> cf:30:cc:9a:08:26:26:24:c5:00:03:32:20:48:41:b1:29:8f: </li><li class=""> 5d:3d:2a:78:54:0e:a8:76:07:6c:7f:23:42:75:c2:fb:83:1d: </li><li class="alt"> 70:44:5e:8c:90:cf:b4:23:b7:23:5b:06:05:32:58:e3:af:1c: </li><li class=""> be:1d:50:7b:fd:37:66:ba:9c:ec:bb:af:ee:b6:04:f7:c5:2e: </li><li class="alt"> 59:22 </li><li class="">-----BEGIN CERTIFICATE----- </li><li class="alt">MIIC2jCCAkOgAwIBAgIJAIkRn6bKA2OsMA0GCSqGSIb3DQEBBQUAMGoxCzAJBgNV </li><li class="">BAYTAmNuMQswCQYDVQQIEwJjbjELMAkGA1UEChMCY24xCzAJBgNVBAsTAmNuMRIw </li><li class="alt">EAYDVQQDEwlsb2NhbGhvc3QxIDAeBgkqhkiG9w0BCQEWEXh0YXlpbmdAZ21haWwu </li><li class="">Y29tMB4XDTEwMDgwNzEyMzk0MVoXDTExMDgwNzEyMzk0MVowdzELMAkGA1UEBhMC </li><li class="alt">Y24xCzAJBgNVBAgMAmNuMQswCQYDVQQHDAJjbjELMAkGA1UECgwCY24xCzAJBgNV </li><li class="">BAsMAmNuMRIwEAYDVQQDDAlsb2NhbGhvc3QxIDAeBgkqhkiG9w0BCQEWEXh0YXlp </li><li class="alt">bmdAZ21haWwuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDO1ajf0efu </li><li class="">ktHReCCpbQob9gndEynvch0XVN0cjSgnaf5wO/oro0VAgOoOW6e9QNDNvCx0A4v3 </li><li class="alt">bF4fCV3GigXquHL8eYtiYjgLQih+Dfznu7CHZmqyNZKRuXictnYBCyp031+hizFh </li><li class="">kJP5INtGWRIum1nAMk6SFKF+UnvMAl7iRQIDAQABo3sweTAJBgNVHRMEAjAAMCwG </li><li class="alt">CWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNV </li><li class="">HQ4EFgQU/iBWBI62vj464dqmSjrhFpMdP4EwHwYDVR0jBBgwFoAUJgnz1SYTAB8+ </li><li class="alt">zIYd5O43BmUVTnYwDQYJKoZIhvcNAQEFBQADgYEACaAWQ6KTEaer9Re3NjWEnzs3 </li><li class="">MjM/k2OwTLvRtJtPN3hi9Kz/KLBjcS6afPRALrFfrknn4m/ezzDMmggmJiTFAAMy </li><li class="alt">IEhBsSmPXT0qeFQOqHYHbH8jQnXC+4MdcERejJDPtCO3I1sGBTJY468cvh1Qe/03 </li><li class="">Zrqc7Luv7rYE98UuWSI= </li><li class="alt">-----<span class="func">END</span> CERTIFICATE----- </li><li class="">Signed certificate is in newcert.pem </li></ol></div>
复制代码 cp newcert.pem server.crt
5,产生客户端证书
生成客户私钥:
openssl genrsa -des3 -out client.key 1024 生成客户证书
openssl req -new -key client.key -out client.csr 签证:
openssl ca -in client.csr -out client.crt 转换成pkcs12格式,为客户端安装所用
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.pfx 这一步根安装服务器的证书差不多,不同的是签证,最后安装的时候,client.pfx的密码要记住,在客户端安装的时候要用到的。 [root@BlackGhost ssl]# openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.pfx
Enter pass phrase for client.key:
Enter Export Password:
Verifying - Enter Export Password: 客户端和服务器端都可以使用服务器端证书,所以这一步不做也行。 6,集中所以证书和私私钥到一起
#cp demoCA/cacert.pem cacert.pem 同时复制一份证书,更名为ca.crt
#cp cacert.pem ca.crt 7,apache配置
vi /usr/local/apache/conf/extra/ssl.conf - ssl开启
- SSLEngine on
-
- 指定服务器证书位置
- SSLCertificateFile /usr/local/apache/conf/ssl/server.crt
-
- 指定服务器证书key位置
- SSLCertificateKeyFile /usr/local/apache/conf/ssl/server.key
-
- 证书目录
- SSLCACertificatePath /usr/local/apache/conf/ssl
-
- 根证书位置
- SSLCACertificateFile /usr/local/apache/conf/ssl/cacert.pem
-
- 要求客户拥有证书
- SSLVerifyClient require
- SSLVerifyDepth 1
- SSLOptions +StdEnvVars
-
- 记录log
- CustomLog "/usr/local/apache/logs/ssl_request_log" \
- "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x "%r" %b"
复制代码 vi /usr/local/apache/conf/extra/httpd_vhosts.conf- listen 443 https
- NameVirtualHost *:443
- <VirtualHost _default_:443>
-
- DocumentRoot "/home/zhangy/www/metbee/trunk/src/web"
- ServerName *:443
- ErrorLog "/home/zhangy/apache/www.metbee.com-error.log"
- CustomLog "/home/zhangy/apache/www.metbee.com-access.log" common
- Include conf/extra/ssl.conf
-
- </VirtualHost>
复制代码vi /usr/local/apache/conf/httpd.conf把Include conf/extra/httpd-vhosts.conf前面的注释去掉 启动 /usr/local/apache/bin/apachectl -D SSL -k start Server *:10000 (RSA)
Enter pass phrase:输入的是server的密钥 OK: Pass Phrase Dialog successful. 8,安装客户端证书
把ca.crt和client.pfx copy到客户端,双击client.pfx就会进入证书的安装向导,下一步就行了,中间会让你输入密码 四,安装所遇到的问题
1,生成的密码很多,一会让输入密码,会忘得,并且主证书的密码和下面的证书的密码不能重得,会报错的,所以要搞个文本记下来。 2,升级openssl引发的问题 httpd: Syntax error on line 56 of /usr/local/apache/conf/httpd.conf: Cannot load /usr/local/apache/modules/libphp5.so into server: libssl.so.0.9.8: cannot open shared object file: No such file or directory httpd: Syntax error on line 56 of /usr/local/apache/conf/httpd.conf: Cannot load /usr/local/apache/modules/libphp5.so into server: libcrypto.so.0.9.8: cannot open shared object file: No such file or directory 用ln -s来建立软链接,就可以了。不过这种方法不是万能的,比如我把libpng从1.2升到1.4,libjpeg从7.0升到8.0结果是系统差点崩掉,用软链接不管用,我把他们弄掉,从网上下的低版本重装。 3,证书的国家名称,省名要相同不然生成空证书, The countryName field needed to be the same in the
CA certificate (cn) and the request (sh) 4,提示CommonName时,要添写全域名,会提示警告 RSA server certificate CommonName (CN) `cn' does NOT match server name!? 5,相同的证书不能生成二次,名字不一样也不行,也就是说server.cst和client.csr信息不能完相同,不然会报 failed to update database
TXT_DB error number 2 6,页面浏览时,会看到提示,你的证书是不可信的,是因为我配置的不对,还是自己建的证书就是不要信的呢? 7,当我加了SSLVerifyClient require SSLVerifyDepth 1 这二个配置时,在windows下面,要你输入证书后,就可以看到页面了,但在用firefox就是不行呢?看下面的ssl_request_log日志,192.168.18.3是用windows的IE浏览器 [09/Aug/2010:22:02:21 +0800] 127.0.0.1 TLSv1 DHE-RSA-CAMELLIA256-SHA "GET /robots.txt HTTP/1.1" 208
[09/Aug/2010:22:02:21 +0800] 127.0.0.1 TLSv1 DHE-RSA-CAMELLIA256-SHA "GET /robots.txt HTTP/1.1" 208
[09/Aug/2010:22:02:21 +0800] 127.0.0.1 TLSv1 DHE-RSA-CAMELLIA256-SHA "GET /robots.txt HTTP/1.1" 208
[09/Aug/2010:22:02:55 +0800] 192.168.18.3 TLSv1 RC4-MD5 "GET / HTTP/1.1" 1505
[09/Aug/2010:22:02:55 +0800] 192.168.18.3 TLSv1 RC4-MD5 "GET / HTTP/1.1" 1505
[09/Aug/2010:22:02:55 +0800] 192.168.18.3 TLSv1 RC4-MD5 "GET / HTTP/1.1" 1505 遇到肯定不止这几个,有的想不起来了。关于6,7,还请高手指教。谢谢  apache ssl
摘自:http://blog.51yip.com/apachenginx/958.html
|