HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。HTTPS 在HTTP 的基础下加入SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面 。
安装Openssl
生成ssl证书,需要用到openssl
1 | yum install openssl-devel -y |
重新编译apache
配置https,需要用到两个模块mod_socache_shmcb.so和mod_ssl.so,但由于我的apache是源码编译而成的,编译时没有生成mod_ssl.so模块,所以需要重新编译;其实mod_ssl.so可以用过动态方式编译安装,但是稍微有点复杂,所以建议备份网站,重新编译。
模块路径(../apache/modules/)
1 | 进入httpd源码目录 |
修改配置文件
打开httpd.conf配置文件
分别找到以下三条指令
加载模块(删除#)
1 | LoadModule socache_shmcb_module modules/mod_socache_shmcb.so |
修改外部配置文件
打开apache目录下conf/extra/httpd-ssl.conf文件
1 | ServerName www.xxx.com:443 # 域名 |
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 | RewriteEngine on |
配置成功后访问http时会自动跳转到https页面。