一、Apache实现https
1.创建证书
(1)生成私钥
mkdir /data
cd /data
[root@sutang data]# openssl genrsa -des3 -out server.key 1024
Generating RSA private key, 1024 bit long modulus
......++++++
..................++++++
e is 65537 (0x10001)
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:
[root@sutang data]#
#des3是算法, -out [filename] 1024是长度,默认 会让你输入密码,不小于4个字符
(2)生成证书请求文件(csr)
openssl req -new -key server.key -out server.csr 执行这条命令,会出现输入国家、省等等,下面文字就是说名让你输入什么
C:Country ,单位所在国家,为两位数的国家缩写,如: CN 就是中国
ST 字段: State/Province ,单位所在州或省
L 字段: Locality ,单位所在城市 / 或县区
O 字段: Organization ,此网站的单位名称;
OU 字段: Organization Unit,下属部门名称;也常常用于显示其他证书相关信息,如证书类型,证书产品名称或身份验证类型或验证内容等;
CN 字段: Common Name ,网站的域名;
生成 csr 文件后,提供给 CA 机构,签署成功后,就会得到一個 example.crt 证书文件,SSL 证书文件获得后,就可以在 Nginx 配置文件里配置 HTTPS 了。
-new 创建一个新的证书请求文件 -key filename 指定私钥的输入文件,创建证书请求时需要 -out filename.csr 输出指定的文件名
您只要把server.csr这个档案给第三方CA(Certificate Authority)机构签署生成证书就可以了。
(3)取消私钥文件中的密码
采用DES3加密新产生的私钥server.key文件,每次要使用这个私钥时都要用输入密码。如果您的电子证书是用在apache等服务器中,您每次启动服务器时都要输入密码一次,我们可以在生成证书请求文件后,删除私钥的密码。
采用128位rsa算法生成密钥server.key文件,这种方法产生的证书在apache等服务器中启动服务器时不会要求输入密码,同时也不会把私钥加密。
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
(4)签署证书请求文件并生成证书(crt)
如果要第三方签署的话,你只需要把server.csr这个档案给第三方CA(Certificate Authority)机构签署生成证书就可以了。
此处我们采取自己签署的方式。
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Apache要使用的文件只有两个:被取消了密码的server.key、证书文件server.crt
2.添加ssl模块
Apache的源码包中自带了ssl模块,默认是不安装的。
有两种方式添加模块。
一是在备份了原有配置文件的情况下,重新编译安装软件,然后将原有配置文件替换掉新的配置文件,然后修改配置文件以支持原有模块。此种弊端在于你可能不知道哪些配置文件是修改过的。你可以直接将安装目录下的conf文件备份了。
如果make install不替换配置文件的话,你可以采用此种方式。至于make install是否再二次编译时是否替换配置文件,我也不敢确认。
二是在源码包中重新编译,但不执行make install,然后替换掉安装目录下相关的二进制文件。此种弊端在于你很有可能不知道要替换的二进制文件在哪里,有哪些。
三是动态编译添加模块。
建议使用第三种。因为你可能不知道修改了哪些配置文件。
--------------第一种-------------------------
(1)备份原有的配置文件
[root@sutang httpd-2.2.15]# cd /usr/local/httpd/conf/
[root@sutang conf]# mkdir /httpd_bak
[root@sutang conf]# cp httpd.conf /httpd_bak/httpd.conf.bak
(2)查看原有的编译参数
如果上次安装后没有make clean的话,在安装目录下的build/config.nice中可以找到
[root@sutang bin]# cat /usr/local/httpd/build/config.nice
#! /bin/sh
#
# Created by configure
"./configure" \
"--prefix=/usr/local/httpd" \
"--enable-so" \
"--enable-rewriter" \
"--enable-charset-lite" \
"--enable-cgi" \
"$@"
[root@sutang bin]#
#/usr/local/httpd是httpd的安装目录
(3)在源码包重新编译
先安装添加ssl模块所需的依赖:
yum install openssl-devel
编译
./configure --prefix=/usr/local/httpd --enable-so --enable-rewriter --enable-charset-lite --enable-cgi --enable-ssl
安装
make && make install
(4)还原配置文件
通过覆盖的方式还原配置文件。
[root@sutang conf]# cp /httpd_bak/httpd.conf.bak /usr/local/httpd/conf/httpd.conf
3.修改配置文件启用ssl模块
(1)修改httpd.conf
把此处注释去掉,代表启用ssl模块
(2)修改ssl.conf文件
vim /usr/local/httpd/conf/extra/httpd-ssl.conf
下面的配置为访问https页面的网页目录配置。
当我们访问https://192.168.8.116/时,会去读取httpd-ssl.conf文件中的配置,根据该文件中的配置网页根目录下去找网页。
图中那两处为证书文件和密钥的配置。
(3)将证书文件复制到指定位置
[root@sutang conf]# cd /data
[root@sutang data]# cp server.crt server.key /usr/local/httpd/conf/
4.测试
(1)编写一个配置文件
echo ssl>/usr/local/httpd/htdocs/sss.html
(2)重启服务并测试
service httpd restart
-------------------第二种----------------------
动态加载模块
(1)安装ssl模块需要的依赖
yum -y install openssl-devel
(2)加载模块
进入Apache的源码解压目录下面的modules/ssl下执行命令:
apxs -i -c -a -D HAVE_OPENSSL=1 -I /usr/include/openssl -lcrypto -lssl -ldl *.c
apxs命令参数说明:
-i 此选项表示需要执行安装操作,以安装一个或多个动态共享对象到服务器的modules目录中。
-a 此选项自动增加一个LoadModule行到httpd.conf文件中,以激活此模块,或者,如果此行已经存在,则启用之。
-A 与 -a 选项类似,但是它增加的LoadModule命令有一个井号前缀(#),即此模块已经准备就绪但尚未启用。
-c 此选项表示需要执行编译操作。它首先会编译C源程序(.c)files为对应的目标代码文件(.o),然后连接这些目标代码和files中其余的目标代码文件(.o和.a),以生成动态共享对象dsofile 。如果没有指定 -o 选项,则此输出文件名由files中的第一个文件名推测得到,也就是默认为mod_name.so
(3)查看模块
查看模块确认模块是否加载成功。
[root@sutang ssl]# cd /usr/local/httpd/modules/
[root@sutang modules]# ls
httpd.exp mod_ssl.so
[root@sutang modules]#
3.修改配置文件
(1)修改httpd.conf启用模块
vim /usr/local/httpd/conf/httpd.conf
确认是否启用ssl模块
取消注释调用ssl的配置文件。
(2)修改ssl.conf文件
vim /usr/local/httpd/conf/extra/httpd-ssl.conf
下面的配置为访问https页面的网页目录配置。
当我们访问https://192.168.8.116/时,会去读取httpd-ssl.conf文件中的配置,根据该文件中的配置网页根目录下去找网页。
图中那两处为证书文件和密钥的配置。
(3)将证书文件复制到指定位置
[root@sutang conf]# cd /data
[root@sutang data]# cp server.crt server.key /usr/local/httpd/conf/
4.测试
(1)编写一个配置文件
echo sslabc >/usr/local/httpd/htdocs/abc.html
(2)重启服务并测试
service httpd restart