Apache之https
■ 安装openssl
___________________________________________________________
http://www.openssl.org/source/ #下载openssl [[email protected]_server src]# tar xf openssl-1.0.1s.tar.gz [[email protected]_server src]# cd openssl-1.0.1s [[email protected]_server openssl-1.0.1s]# ./config [[email protected]_server openssl-1.0.1s]# make && make install ------------------------------------源码安装方式 [[email protected]_server src]# wget http://mirrors.cnnic.cn/apache/httpd/httpd-2.2.31.tar.gz [[email protected]_server src]# tar xvf httpd-2.2.31.tar.gz [[email protected]_server src]#cd httpd-2.2.31 [[email protected]_server httpd-2.2.31]#./configure --prefix=/usr/local/apache2 --with-included-apr --enable-so --enable-deflate=shared --enable-expires=shared --enable-rewrite=shared --with-pcre --enable-ssl=shared --with-ssl=/usr/local/ssl #此处选择动态模式,--enable-ssl=static --with-ssl=/usr/local/ssl选择静态 ------------------------------------添加扩展模块方式 [[email protected]_server openssl-1.0.1s]# cd /usr/local/src/httpd-2.2.31/modules/ssl #务必进入httpd源码目录 [[email protected]_server ssl]# /usr/local/apache2/bin/apxs -i -c -a -D HAVE_OPENSSL=1 -I /usr/lib/openssl/engines/lib -lcrypto -lssl -ldl *.c #
错误一、error "Unrecognized SSL Toolkit!、declaration for parameter ‘XXXXXX‘ but no such parameter
解决:添加-D HAVE_OPENSSL=1
错误二、undefined symbol: ssl_cmd_SSLMutex
解决:apxs编译追加模块成功,但是apache启动失败。出现这个错误后,我把运行apxs时指定mod_ssl.c改成*.c 。和添加mod_deflate不一样,ssl中包含多个源代码文件
错误三、undefined symbol: X509_INFO_free
解决:由于静态连接了 openssl的库造成的(默认),解决办法是添加-lcrypto -lssl -ldl参数
■ 创建私钥
___________________________________________________________
[[email protected]_server modules]# cd /usr/local/ssl/bin/ [[email protected]_server bin]# openssl genrsa -out server.key 2048 [[email protected]_server bin]# cp server.key /usr/local/apache2/conf/ssl.key
■ 生成证书请求(CSR)文件
___________________________________________________________
[[email protected]_server bin]# openssl req -new -key server.key -out certreq.csr Country Name (2 letter code) [XX]:cn #所在国家的ISO标准代号,中国为CN State or Province Name (full name) []:zj #单位所在地省/自治区/直辖市 Locality Name (eg, city) [Default City]:zs #单位所在地的市/县/区 Organization Name (eg, company) [Default Company Ltd]:dx #单位/机构/企业合法的名称 Organizational Unit Name (eg, section) []:zwy #部门名称 Common Name (eg, your name or your server‘s hostname) []:zwy #此项必须与访问提供SSL服务的服务器时所应用的域名完全匹配 Email Address []: #邮件地址,不必输入,直接回车跳过 "extra"attributes #以下信息不必输入,回车跳过直到命令执行完毕
■ 备份私钥并提交证书请求
___________________________________________________________
请将证书请求文件certreq.csr提交给CA服务商(如天威诚信),并备份保存证书私钥文件server.key,等待证书的签发。服务器证书密钥对必须配对使用,私钥文件丢失将导致证书不可用
■ 获取服务器证书中级CA证书
___________________________________________________________
为保障服务器证书在客户端的兼容性,服务器证书需要安装两张中级CA证书(不同品牌证书,可能只有一张中级证书)。
从邮件中获取中级CA证书:
将证书签发邮件中的从BEGIN到 END结束的两张中级CA证书内容(包括“-----BEGIN CERTIFICATE-----”和“-----END CERTIFICATE-----”)粘贴到同一个记事本等文本编辑器中,中间用回车换行分隔。修改文件扩展名,保存为conf/ssl.crt/intermediatebundle.crt文件(如果只有一张中级证书,则只需要保存并安装一张中级证书)。
■ 获取EV服务器证书
___________________________________________________________
将证书签发邮件中的从BEGIN到 END结束的服务器证书内容(包括“-----BEGIN CERTIFICATE-----”和“-----END CERTIFICATE-----”) 粘贴到记事本等文本编辑器中,保存为ssl.crt/server.crt文件
■ Apache配置
___________________________________________________________
[[email protected]_server ~]# vim /usr/local/apache2/conf/httpd.conf Listen 443 [[email protected]_server ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf NameVirtualHost *:443 <VirtualHost *:443> DocumentRoot "/data/web/www" ServerName aaa.com:443 ErrorLog "logs/error.log" CustomLog "logs/access.log" combined <IfModule mod_ssl.c> SSLEngine on SSLCertificateFile /usr/local/apache/conf/ssl.crt/server.crt SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/server.key SSLCertificateChainFile /usr/local/apache/conf/ssl.crt/intermediatebundle.crt </IfModule> </VirtualHost>
错误:curl: (35) error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
解决:把443的VirtualHost 放到80的VirtualHost 前面;80 部分 NameVirtualHost *443部分NameVirtualHost *:443