我的环境是:Linux+Apache+MySQL+PHP
1.下载openssl 及相关依赖
#yum install -y openssl
2.进入目录 /etc/pki/tls/certs
#cd /etc/pki/tls/certs
3.生成私钥文件(key)
#openssl genrsa -des3 -out server.key 1024
在提示后输入密码(密码不显示)
4.为避免每次服务启动都需输入证书密码,删除证书密码
#openssl rsa -in server.key -out server.key
5.用server.key生成证书
#openssl req -new -key server.key -out server.csr
参数说明:
-new:表示生成一个新证书签署请求
-key:用到的私钥文件
-out:证书的保存路径
-days:证书的有效期限,单位是day(天),默认是openssl.cnf的default_days
此时根据提示完成以下信息:
Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:Yangzhou Locality Name (eg, city) [Default City]:Yangzhou Organization Name (eg, company) [Default Company Ltd]:No Organizational Unit Name (eg, section) []:New Common Name (eg, your name or your server's hostname) []:No Email Address []:test@test.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:#可直接回车 An optional company name []:#若上面回车,这边直接回车
6.生成CA的key文件ca.key和根证书ca.crt
#openssl req -new -x509 -keyout ca.key -out ca.crt
此时提示信息与上一步类似
7.创建为根证书CA所需的目录及文件
#touch /etc/pki/CA/index.txt
8.指明证书的开始编号
#echo 01 > /etc/pki/CA/serial
#openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config ../openssl.cnf
根据提示输入y,并回车
10.将ca.crt,server.crt,server.key复制到apache配置目录
例如:我的是/usr/local/apache/conf/
我在conf中创建ssl目录用来存放
# mkdir /usr/local/apache/conf/ssl
11.配置apache
编辑配置文件
vi /usr/local/apache/conf/httpd.conf
引入ssl配置文件,增加支持ssl:
Include conf/extra/httpd-ssl.conf 去掉前面的#
打开ssl模块
LoadModule ssl_module modules/mod_ssl.so 去掉前面的#
若没有找到这句,说明需要安装依赖包:mod_ssl,安装后就会在modules里面找到:
在apache的源码目录中的modules目录下找loggers,ssl这两个文件,若没有则需根据服务器apache版本下载对应版本:http://archive.apache.org/dist/httpd/
将下载好的modules下的loggers,ssl两个文件放至你的apache的源码目录modules下
查找openssl路径
whereis openssl
进入apache的源码目录modules/ssl中
例如我的源码目录为/root/package/httpd-2.4.20
cd /root/package/httpd-2.4.20/modules/ssl执行(/usr/local/apache 是Apache的安装目录)
/usr/local/apache/bin/apxs -a -i -c -L/usr/lib/openssl/engines/lib -c *.c -lcrypto -lssl -ldl;完成后,在apache的安装目录下的modules目录会生成一个mod_ssl.so,同时httpd.conf中会增加一行LoadModule php5_module modules/libphp5.so
编辑httpd-ssl.conf文件
vi /usr/local/apache/conf/extra/httpd-ssl.conf
写入如下内容:
<VirtualHost *:443> ServerAdmin #输入的邮箱地址 php_admin_value open_basedir "/home/www/:/tmp/:/var/tmp/:/proc/" DocumentRoot #工作目录,如/home/www ServerName #域名:443 ErrorLog "/home/wwwlogs/error_log" CustomLog "/home/wwwlogs/access_log" combined SSLEngine on SSLCertificateFile /usr/local/apache/conf/ssl/server.crt#证书的路径 SSLCertificateKeyFile /usr/local/apache/conf/ssl/server.key#证书的路径 # SSLCertificateChainFile /usr/local/apache/conf/ssl/ca.crt#证书的路径 Protocols h2 h2c http/1.1 <Directory "/home/www/"> SetOutputFilter DEFLATE Options FollowSymLinks AllowOverride All Order allow,deny Allow from all DirectoryIndex index.php index.html </Directory> </VirtualHost>
保存并重启Apache
apachectl -k restart
若出现这种报错
解决:在httpd.conf中找到
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so 去掉前面的#
保存并重启