为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支持相关推荐

  1. apache添加ssl协议实现用户认证

    apache添加ssl协议实现用户认证 目标 1对服务器的访问由http改为https, 2仅有证书的客户端可以访问服务器, 3.通过服务器端的配置,可以停用某个客户端的证书. 一 Apache服务器 ...

  2. cxf开发实践(添加SSL支持)

    原文 http://www.newsmth.net/pc/pccon.php?id=10002535&nid=340064 1 SSL概述 安全套接层(SSL)及其新继任者传输层安全(TLS) ...

  3. Nginx配置SSL支持htpps访问

    这一篇记录一下Nginx的SSl配置,各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟.多谢! 我们知道https相对于http是非常安全的,nginx的s ...

  4. Nginx反向代理、负载均衡、SSL支持功能

    应公司领导要求,项目中需要使用Nginx作为反向代理和负载均衡服务器,简单研究了一下 两个虚拟主机分别反向代理一个tomcat服务器 upstream是负载均衡的模块,添加多台提供相同服务的服务器节点 ...

  5. Confluence 6 使用 Apache 和 mod_proxy 添加 SSL和其他

    添加 SSL 如果你计划在你的应用中启用 SSL ,请参考 Securing your Atlassian applications with Apache using SSL 页面中的内容,并确定你 ...

  6. Nginx添加SSL的支持

    nginx添加SSL的支持 (1)完成 --with-http_ssl_module模块的增量添加 >将原有/usr/local/nginx/sbin/nginx进行备份 >拷贝nginx ...

  7. 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 ...

  8. Java后台开发Tomcat添加https支持小程序开发过程

    文章原文:blog.ouyangsihai.cn >> Java后台开发Tomcat添加https支持小程序开发过程 1 给自己的域名申请证书 注意:申请好了如果不是在腾讯注册的域名,不会 ...

  9. apache配置ssl证书

    目的:在阿里云ESC的apache服务器上部署申请的证书实现HTTPS访问 步骤: 1,申请证书(为阿里云自动配发的证书) 2,在apache上部署 2.1,vim /usr/local/apache ...

最新文章

  1. 从源码分析DEARGUI之add_input_float和4
  2. Linux 安装composer
  3. Get Started with Apex Unit Tests
  4. Matlab中varargin函数
  5. 和组内作者consent的模板 亲测有效
  6. leetcode-283-移动零
  7. golang unrecognized import path golang.org/x/net 完美解决方案
  8. 【LeetCode题解】排序
  9. 链接器工具错误 LNK2026 XXX模块对于 SAFESEH 映像是不安全的
  10. 微信小程序——云开发入门
  11. python制作3d相册代码_python中Matplotlib实现绘制3D图的示例代码
  12. 五类推荐系统算法,非常好使,非常全面
  13. 基于龙芯CPU银河麒麟操作系统的国产半实物仿真系统ETestDEV
  14. Java中的冒泡排序,Comparator接口和Comparable接口的简单使用
  15. 怎html样在图片两边加上空白,怎样在博客两边空白处加上自己喜欢的图片?
  16. Android studio语音识别集成科大讯飞语音转文字
  17. 麒麟V10下 安装打包程序
  18. MATLAB下载libsvm,以及对应MinGW-w64版本下载(亲测有效)
  19. mongoDB地理位置检索
  20. 转载《美团点评金融平台Web前端技术体系》

热门文章

  1. php mysql增删查改 主码不能修改_关系规范化中的删除操作异常是指什么
  2. app 缓存html页面,HTML5本地存储VS App缓存离线网站浏览
  3. 为什么java button 不能用 显示红色_Java中的整型包装类值的比较为什么不能用==比较?原因是因为缓存...
  4. 华为服务器u盘装linux_华为matebook14双系统(deepin15.11+win10)新体验!
  5. 崩坏3支持鸿蒙系统没,崩坏3鸿蒙版
  6. MySQL----获取当前日期当月第一天,最后一天
  7. IPLATUI----GRID状态
  8. 串口通信工具android,Android串口通信工具
  9. sql视图查询对象无效_SQL数据分析 - 4 复杂查询
  10. go build 无文件_Go学习_30_Golang代码性能分析工具