为apache添加SSL支持
为Apache添加SSL模块
一、相关知识介绍:
有时候在使用一个WEB应用的时候,为了让HTTP的传输更加的安全,那就要用到SSL(Security Socket Layer 安全套接层)协议,也就是用HTTPS来访问。
在介绍之前来简单的说说对称加密和非对称加密:
对称加密:在对称加密算法中,加密的双方都持有一个相同的密钥,用这个密钥来加密和解密。由于在加密和解密的过程中使用同一种密钥,所以称其为对称加密算法。
非对称加密:在非对称加密算法中,引进了公钥和私钥这两个概念。公钥:就是大家都知道的,可以加密,也可以解密。私钥:只有私钥持有人才知道的,不能公布于从的一个密钥。公钥和私钥是成对出现的,单独的一个是没有任何意义的,而且不能由一个摧算出另一个。用公钥加密的数据可以用私钥来解密,这就实现了数据的加密;同样用私钥加密的数据,也只有用公钥才能解密,这实现了身份验证。
HTTPS的原理大致是这样的:客户端在通过https访问网站的时候,WEB服务器会给客户机自己的公钥(也就是下面要说的server.crt),然后客户机就会随机的产生一个对称的密钥,之后,再用刚才这个公钥来给对称密钥来加密,最后,再把这个加了密的对称密钥发给服务器,服务器在接收到这个加密了的对称密钥后,用自己的私钥来解密,这样服务器也得到了这个对称密钥。当客户机有请求要发给服务器的时候,或是服务器在给客户机发数据的时候,都用这个对称密钥来加密所传输的数据。这样安全性就大提高了。如下图所示:
由上可以看出,HTTPS中先是使用非对称加密算法,把对称的密钥给传到服务器端,然后再用这个对称的密钥来对要传输的数据进行加密的!
二、安装Apache并让其支持SSL,在安装之前还是要把apr和apr-util这两个给安装上:
1、安装apr:
# ./configure –prefix=/usr/local/apr
# make && make install
2、安装apr-util:
# ./configure –prefix=/usr/local/apr-util –with-apr=/usr/local/apr/
# make && make install
3、安装apache:
# ./configure –prefix=/usr/local/apache –enable-modules=most –enable-mods-shared=all –with-apr=/usr/local/apr/ --with-apr-util=/usr/local/apr-util/
# make && make install
注:这里的—enable-modules=most 是将大部分的模块静态的编译到httpd二进制文件中,
--enable-mods-shared=all 是让apache动态的加载所有的模块,如果去掉shared的话,那就是静态加载所有的模块。
当然你不用这两个参数也可以,用—enable-ssl,但是这样做的话,如果以后要添加新的模块的话,有点麻烦。
4、安装oenssl:
openssl众多的密码算法、公钥基础设施标准以及SSL协议。更多的信息请百度,这写不下了。
# ./config //注意看清楚哦,这里是config不是configure
# make && make install
三、为服务器生成私钥(server.key)和公钥(server.crt):
1、用openssl命令为服务器生成server.key私钥:
[root@ns openssl-1.0.0e]# cd /usr/local/ssl/bin/
[root@ns bin]# ./openssl genrsa -des3 -out server.key
Generating RSA private key, 512 bit long modulus
.....++++++++++++
....++++++++++++
e is 65537 (0x10001)
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:
[root@ns bin]#
注:这里的默认长度是512位的密码,自己还可以在后面加上个长度如1024,并且最后还会让你输入一个私钥的保护密码。防止私钥被盗后,被人乱用。
2、用刚才的私钥给服务器生成一个证书申请文件server.csr:
[root@ns bin]# ./openssl req -new -key server.key -out server.csr
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CN //输入国家代码中国CN
State or Province Name (full name) [Some-State]:SHANGHAI //省份名称
Locality Name (eg, city) []:SHANGHAI //城市名称
Organization Name (eg, company) [Internet Widgits Pty Ltd]:. //组织名称,也可填公司名,我这没有填。
Organizational Unit Name (eg, section) []:xfzhou.com //单位名称,
Common Name (eg, YOUR name) []:xfzhou.com //这个填的要与ServerName一样
Email Address []:admin@xfzhou.com //联系的邮件地址
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:123456 //这个密码有人说不填,但是,我这填了也没有用到。
An optional company name []:xfzhou.com //还是公司名称。
[root@ns bin]#
3、用前面两步生成的私钥(server.key)文件和证书申请文件(server.csr)来给服务器申请证书:
[root@ns bin]# ./openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
Signature ok
subject=/C=CN/ST=SHANGHAI/L=SHANGHAI/OU=xfzhou.com/CN=xfzhou.com/emailAddress=admin@xfzhou.com
Getting Private key
Enter pass phrase for server.key: //输入私钥的保护密码
[root@ns bin]# ls
c_rehash openssl server.crt server.csr server.key
[root@ns bin]#
4、再把上面生成的私钥文件和证书(公钥)文件CP到/usr/local/apache/conf/目录下面:
[root@ns bin]# cp ./server.key /usr/local/apache/conf/
[root@ns bin]# cp ./server.crt /usr/local/apache/conf/
四、修改/usr/local/apache/conf/httpd.conf,启用SSL模块,并启动HTTPD服务:
# vi /usr/local/apache/conf/httpd.conf
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so //这个模块也要加载,否则启动不了。
LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf //找到这三行然后把注释给去掉。
[root@ns bin]# /usr/local/apache/bin/apachectl start
Apache/2.4.3 mod_ssl (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.
Server www.example.com:443 (RSA)
Enter pass phrase: //这里输入的是那个第一次创建的那server.key的密码。
OK: Pass Phrase Dialog successful.
[root@ns bin]# netstat -anpt| grep httpd
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 14242/httpd
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 14242/httpd
[root@ns bin]#
若你的某个web服务器上运行了多个网站,某个网站比如说后台管理的网站可能需要htts加密传输,但是前台的不需要,如果遇到这样的问题,你就可以把你的网站的后台管理的页面用HTTPS来访问,具体做法是把网站的后台管理的根目录放到httpd-ssl.conf文件中的虚拟主机中。
五、验证:
1、在浏览器中直接输入http://192.168.10.100发现是可以访问的如下图:
2、用https://192.168.10.100访问的时候如下,会出现证书错误的警告:
点击继续浏览,就可以看到网站的内容了,如下:
再点击下“证书错误”——“查看证书”就可以看到证书了。如下:
发现一个问题,就是在启动apache的时候每次都会让你输入密码,这样会很麻烦的,要是你的服务器重启了,那么你就必须要手工输入密码你的网站才会起来。。
下面给出了一个解决办法:
在/usr/local/apache/conf/目录下创建一个sendsslpwd的文件。内容如下:
[root@ns conf]# cat sendsslpwd
#!/bin/bash
sslpwd='xfzhou' //这个就是私钥的保护密码
echo $sslpwd
[root@ns conf]#
再来修改下httpd-ssl.conf这个文件:
找到 SSLPassPhraseDialog builtin 这一行,将其注释掉
加入 SSLPassPhraseDialog exec:/usr/local/apache2/conf/sendsslpwd
这样,每次启动将不会提示输入SSL密码了如下:
[root@ns conf]#
[root@ns conf]# /usr/local/apache/bin/apachectl stop
[root@ns conf]# /usr/local/apache/bin/apachectl start
[root@ns conf]#
还有一种解决办法就是执行下面的这个命令:
# openssl rsa -in server.key -out server.key
然后再输入一次密码,接下来你再重启服务的时候就不会让你手工输入密码了!
转载于:https://blog.51cto.com/xfzhou89/1162435
为apache添加SSL支持相关推荐
- apache添加ssl协议实现用户认证
apache添加ssl协议实现用户认证 目标 1对服务器的访问由http改为https, 2仅有证书的客户端可以访问服务器, 3.通过服务器端的配置,可以停用某个客户端的证书. 一 Apache服务器 ...
- cxf开发实践(添加SSL支持)
原文 http://www.newsmth.net/pc/pccon.php?id=10002535&nid=340064 1 SSL概述 安全套接层(SSL)及其新继任者传输层安全(TLS) ...
- Nginx配置SSL支持htpps访问
这一篇记录一下Nginx的SSl配置,各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟.多谢! 我们知道https相对于http是非常安全的,nginx的s ...
- Nginx反向代理、负载均衡、SSL支持功能
应公司领导要求,项目中需要使用Nginx作为反向代理和负载均衡服务器,简单研究了一下 两个虚拟主机分别反向代理一个tomcat服务器 upstream是负载均衡的模块,添加多台提供相同服务的服务器节点 ...
- Confluence 6 使用 Apache 和 mod_proxy 添加 SSL和其他
添加 SSL 如果你计划在你的应用中启用 SSL ,请参考 Securing your Atlassian applications with Apache using SSL 页面中的内容,并确定你 ...
- Nginx添加SSL的支持
nginx添加SSL的支持 (1)完成 --with-http_ssl_module模块的增量添加 >将原有/usr/local/nginx/sbin/nginx进行备份 >拷贝nginx ...
- apache添加支持php的模块,配置Apache支持PHP5 apache php 套件 apache添加php模块 apache部署php项...
环境:window 7.Apache/2.2.19 (Win32) PHP/5.2.9-1 1.配置服务器名称 将里面的 #ServerNamelocalhost:80 注释去掉即可. 重新运行Apa ...
- Java后台开发Tomcat添加https支持小程序开发过程
文章原文:blog.ouyangsihai.cn >> Java后台开发Tomcat添加https支持小程序开发过程 1 给自己的域名申请证书 注意:申请好了如果不是在腾讯注册的域名,不会 ...
- apache配置ssl证书
目的:在阿里云ESC的apache服务器上部署申请的证书实现HTTPS访问 步骤: 1,申请证书(为阿里云自动配发的证书) 2,在apache上部署 2.1,vim /usr/local/apache ...
最新文章
- 从源码分析DEARGUI之add_input_float和4
- Linux 安装composer
- Get Started with Apex Unit Tests
- Matlab中varargin函数
- 和组内作者consent的模板 亲测有效
- leetcode-283-移动零
- golang unrecognized import path golang.org/x/net 完美解决方案
- 【LeetCode题解】排序
- 链接器工具错误 LNK2026 XXX模块对于 SAFESEH 映像是不安全的
- 微信小程序——云开发入门
- python制作3d相册代码_python中Matplotlib实现绘制3D图的示例代码
- 五类推荐系统算法,非常好使,非常全面
- 基于龙芯CPU银河麒麟操作系统的国产半实物仿真系统ETestDEV
- Java中的冒泡排序,Comparator接口和Comparable接口的简单使用
- 怎html样在图片两边加上空白,怎样在博客两边空白处加上自己喜欢的图片?
- Android studio语音识别集成科大讯飞语音转文字
- 麒麟V10下 安装打包程序
- MATLAB下载libsvm,以及对应MinGW-w64版本下载(亲测有效)
- mongoDB地理位置检索
- 转载《美团点评金融平台Web前端技术体系》
热门文章
- php mysql增删查改 主码不能修改_关系规范化中的删除操作异常是指什么
- app 缓存html页面,HTML5本地存储VS App缓存离线网站浏览
- 为什么java button 不能用 显示红色_Java中的整型包装类值的比较为什么不能用==比较?原因是因为缓存...
- 华为服务器u盘装linux_华为matebook14双系统(deepin15.11+win10)新体验!
- 崩坏3支持鸿蒙系统没,崩坏3鸿蒙版
- MySQL----获取当前日期当月第一天,最后一天
- IPLATUI----GRID状态
- 串口通信工具android,Android串口通信工具
- sql视图查询对象无效_SQL数据分析 - 4 复杂查询
- go build 无文件_Go学习_30_Golang代码性能分析工具