Apache配置ssl证书-实现https访问

HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。HTTPS 在HTTP 的基础下加入SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面 。

安装Openssl

生成ssl证书,需要用到openssl

1
2
yum install openssl-devel -y
yum update openssl

重新编译apache

  配置https,需要用到两个模块mod_socache_shmcb.so和mod_ssl.so,但由于我的apache是源码编译而成的,编译时没有生成mod_ssl.so模块,所以需要重新编译;其实mod_ssl.so可以用过动态方式编译安装,但是稍微有点复杂,所以建议备份网站,重新编译。
模块路径(../apache/modules/)

1
2
进入httpd源码目录
./configure --prefix=/usr/local/apache --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre --enable-ssl --enable-so

修改配置文件

打开httpd.conf配置文件
分别找到以下三条指令
加载模块(删除#)

1
2
3
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf #引入外部的ssl配置文件

修改外部配置文件

打开apache目录下conf/extra/httpd-ssl.conf文件

1
2
3
4
5
ServerName www.xxx.com:443   # 域名
ServerAdmin xxx@xxx.com # 管理员邮箱

SSLCertificateFile "/usr/local/apache/conf/server.crt" # 证书文件
SSLCertificateKeyFile "/usr/local/apache/conf/server.key" #私钥文件

ssl证书

1、创建密钥
生成一个RSA私钥

1
openssl genrsa -out server.key 2048

2、生成CSR(证书签名请求)
说明:需要依次输入国家,地区,城市,组织,组织单位,Common Name和Email。其中Common Name,可以写自己的名字或者域名,如果要支持https,Common Name应该与域名保持一致,否则会引起浏览器警告。
可以将证书发送给证书颁发机构(CA),CA验证过请求者的身份之后,会出具签名证书,需要花钱。另外,如果只是内部或者测试需求,也可以使用OpenSSL实现自签名。

1
openssl req -new -key server.key -out server.csr

3、生成自签名证书
内部或者测试使用,只要忽略证书提醒就可以了。

1
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt

http重定向https

配置httpd.conf
加载

1
LoadModule rewrite_module modules/mod_rewrite.so

在文本结尾添加

1
2
3
RewriteEngine on 
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

配置成功后访问http时会自动跳转到https页面。

image