https://my.oschina.net/xpbug/blog/197454

必要软件

  1. apache httpd 2.4(windows)

  2. perl 5 (windows)

  3. openssl (windows)

安装软件

因为手上没有linux的空余机器,所以一切操作都是在windows平台上。安装以上三个软件的win版,略。

配置httpd

首先用httpd搭建一个简单的网站。在apache的目录下,找到httpd.conf文件,打开文件,找到下面的内容,并把注释去掉:

  1. # Virtual hosts
  2. Include conf/extra/httpd-vhosts.conf

找到httpd-vhosts.conf文件,打开,并向其中添加一个虚拟网站

  1. <VirtualHost *:80>
  2.    ServerAdmin joey
  3.    DocumentRoot "D:/www/test0"
  4.    ServerName www.test0.com
  5.    ErrorLog "logs/errlog"
  6.    CustomLog "logs/accesslog" common
  7.    <Directory "D:/www/test0">
  8. Order allow,deny
  9. Allow from all
  10. </Directory>
  11. </VirtualHost>

在网站目录下面创建一个index页面, index.html

  1. <html>
  2. <body>test0</body>
  3. </html>

重启httpd,访问网站http://www.test0.com, 可以看到test0页面。(注意,如果www.test0.com无法加入DNS,则可以修改本地的hosts文件)。

生成SSL证书

SSL中存在三种证书,顶级证书,服务器证书和客户端证书。

  • 顶级证书是权威证书颁发机构所持有的证书,权威机构使用顶级证书给服务器证书或客户端证书进行签名。

  • 服务器证书是我们最常见的,访问多有https的网站,都会收到一个服务器证书,如果证书是有有名的权威机构颁发,则浏览器就会帮我们处理证书。如果证书是由不知名机构颁发,浏览器会跳出窗口,问我们是否信任此证书。

  • 客户端证书常见于网银。像招商银行的客户端,可以使用电子证书。之所以存在客户端证书,原因是服务器想验证客户的合法性。这时候,信任是双向的。

一般互联网上,只需要服务器证书,信任是单向的,服务器并不对客户做验证。

安装完openssl以后,其目录存在于C:\OpenSSL-Win32. 现在让我们来生成各种证书。

  1. 打开cmd命令台,在运行openssl的命令之前,先设置环境变量

    1. >set OPENSSL_CONF=c:\openssl-win32\bin\openssl.cfg
  2. 生成顶级证书。这部分应该是有权威机构做的,这里我冒充一下权威机构。

    1. >CA.pl -newca

    在/demoCA/目录下会生成CA的必须文件。这其中包含顶级证书。

  3. 服务器商需要为自己生成公钥密钥,并制作一个证书申请。这里还是我来冒充一下。

    1. >openssl.exe genrsa -des3 -out server.key 1024
    2. >openssl.exe req -new -key server.key -out server.csr

    注意,当遇到下面一行的时候,一定要填写网站的域名,比如今天的例子www.test0.com.

  4. 服务商把证书申请server.csr发送给权威机构,权威机构进行签名。将server.csr重命名为newreq.pem,然后执行下面命令

    1. >CA.pl -sign

    生成的newcert.pem就是证书,将newcert.pem重命名为server.crt,然后发还给服务商。

  5. 生成客户端证书,这部分并不在本实验中,可以忽略,但我把要执行的命令列在这里,以便于以后查找。

    1. >openssl.exe genrsa -des3 -out client.key 1024
    2. >openssl.exe req -new -key client.key -out client.csr
    3. >openssl.exe ca -in client.csr -out client.crt
    4. #生成客户端可安装文件。
    5. >openssl.exe pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.pfx

上面的步骤中,将获得的server.key和server.crt复制出来,待会用。

在win32上,apache不支持加密的private key,所以还需要额外步骤,去除加密。请看最后面的部分。

开启httpd的SSL功能

修改httpd.conf文件,将其中两行的注释去掉

  1. LoadModule ssl_module modules/mod_ssl.so
  2. # Secure (SSL/TLS) connections
  3. Include conf/extra/httpd-ssl.conf

打开httpd-ssl.conf文件,进行编辑

  1. NameVirtualHost *:443
  2. <VirtualHost *:443>
  3.    ServerAdmin joey
  4.    DocumentRoot "D:/www/test0"
  5.    ServerName www.test0.com:443
  6.    ErrorLog "logs/errlog"
  7.    CustomLog "logs/accesslog" common
  8.    
  9.    SSLEngine on
  10.    SSLCipherSuite RC4-SHA:AES128-SHA:HIGH:MEDIUM:!aNULL:!MD5
  11.    SSLCertificateFile "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/conf/server.crt"
  12.    SSLCertificateKeyFile "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/conf/server.key"
  13.    
  14.    <Directory "D:/www/test0">
  15. Order allow,deny
  16. Allow from all
  17. </Directory>
  18. </VirtualHost>

注意,SSLCertificateFile和SSLCertificateKeyFile必须指向之前我们生成的key和证书。

重启httpd

无法重启httpd,并在error.log中发现这么一句话:

SSLPassPhraseDialog builtin is not supported on Win32

原因是因为Win32不支持SSLPassPhraseDialog命令,我们需要把此命令个注释掉,并需要把server.key的PassPhrase也给去掉。步骤如下

  1. 重命名server.key为server.key.org

  2. 运行命令 >openssl rsa -in server.key.org -out server.key

  3. 将产生的new key替换到原来的位置。

  4. 编辑httpd-ssl.conf,把 #SSLPassPhraseDialog  builtin注释掉。

再重启一下httpd. 还有错误,error.log中有这么一句话:

Syntax error on line 62 of C:/Program Files (x86)/Apache Software Foundation/Apache2.2/conf/extra/httpd-ssl.conf:

SSLSessionCache: Invalid argument: size has to be >= 8192 bytes

原因是命令吧(X86)给当做86来解析了,需要做下修改

  1. #修改前
  2. SSLSessionCache        "shmcb:C:/Program Files (x86)/Apache Software Foundation/Apache2.2/logs/ssl_scache(512000)"
  3. #修改后
  4. SSLSessionCache        "shmcb:C:/PROGRA\~2/Apache Software Foundation/Apache2.2/logs/ssl_scache(512000)"

再次重启,成功。

验证https

在浏览器中输入网址https://www.test0.com, 浏览器会询问你是否信任当前证书。因为这个证书不是权威机构发放的。选择信任。我们可以查看证书,证书里面的签发机构是我。

接下来几天的计划

下一步,将使用tomcat搭建集群,使用apache做负载平衡。http://my.oschina.net/xpbug/blog/197680

接着,会给tomcat制作登录页面。然后只保留登录页面的https连接,其它页面使用http.

然后,会开启tomcat认证和授权。

接着,会搭建第二个tomcat网站,并开启两个网站之间的SSO。

最后,会着手性能优化,如何增加cache。

Apache httpd开启SSL的更多相关文章

  1. Mac 配置Apache Php编译ssl错误解决

    终端 Php编译错误解决 //错误信息 unable to connect to ssl://gateway.sandbox.push.apple.com:2195 (Unknown error) i ...

  2. CentOS7下Apache及Tomcat开启SSL

    安装: 复制代码 yum install -y openssl #使用openssl可手动创建证书 yum install -y httpd yum install -y mod_ssl 防火墙打开8 ...

  3. wamp下开启SSL,解决APACHE启动问题

    wamp开启SSL解决wamp5_1.7.4中APACHE启动问题 1.#修改httpd.conf文件LoadModule ssl_module modules/mod_ssl.soInclude c ...

  4. 在linux下的apache配置https协议,开启ssl连接

    环境:linux 配置https协议,需要2大步骤: 一.生成服务器证书 1.安装openssl软件 yum install -y openssl mod_ssl 2.生成服务器私匙,生成server ...

  5. Mac下配置Apache Httpd的Https/SSL

    Mac下配置Apache Httpd的Https/SSL httpd版本: httpd-2.4.17 jdk版本: jdk1.8.0_65 参考来源: Mac下安装Apache Httpd Mac O ...

  6. Apache httpd 2.4.27开启GZIP压缩功能

    转载自素文宅博客:https://blog.yoodb.com/yoodb/article/detail/1373 HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的文件压缩算法,现在的应 ...

  7. Apache万网SSl证书安装不成功的一个注意事项(https安全链接,基于phpstudy)

    最近,微信小程序挺火,要做小程序网站域名必须要有ssl证书,形成https://的安全链接,我于是从万网上下载了一个免费的ssl证书,按照万网提供的安装方式怎么也安装不好,最后我这个Apache小白费 ...

  8. CentOS 使用 LAMP 环境开启 SSL 搭建 WordPress

    环境阿里云新装CentOS 7.4, 使用yum(非编译安装)搭建LAMP, CA证书为阿里云免费提供的, WordPress为官网下载 安装 LAMP 并开启 HTTPS 1, 关闭防火墙 # sy ...

  9. Linux—搭建Apache(httpd)服务

    1.httpd简介? http是Apache超文本传输协议服务器的主程序.它是一个独立的后台进程,能够处理请求的子进程和线程. http常用用的两个版本是httpd-2.2和httpd-2.4 Cen ...

随机推荐

  1. C++中标准容器Vector,元素操作.insert()小结

    insert() 函数有以下三种用法: iterator insert( iterator loc, const TYPE &val );  //在指定位置loc前插入值为val的元素,返回指 ...

  2. Wifi热点工具-青青草原WiFi

    有时只有有线网络,但手机需要上网,这时需要将笔记本作为无线热点. 青青草原WiFi,这个工具用起来挺方便,http://www.22zy.net/.

  3. Oracle-11g-R2(11.2.0.3.x)RAC Oracle Grid & Database 零宕机方式回滚 PSU(自动模式)

    回滚环境: 1.源库版本: Grid Infrastructure:11.2.0.3.15 Database:11.2.0.3.15 2.目标库版本: Grid Infrastructure:11.2 ...

  4. osg 笔记一 (转)

    场景图形采用一种自顶向下的,分层的树状数据结构来组织空间数据集,以提高渲染的效率 场景图形树结构的顶部是一个根节点,从根节点向下延伸,各个组节点中均包含了几何信息和用于控制其外观的渲染状态信息.根节点 ...

  5. Splash and Wizard

    https://github.com/xcz1899/AndroidGuide https://github.com/w446108264/XhsWelcomeAnim https://github. ...

  6. myloader原理0

    开源MySQL多线程逻辑导入工具myloader原理与改进 在上一篇中,介绍了多线程备份工具mydumper的实现及网易对其所做的优化,本篇聊聊与mydumper配合使用的myloader工具. my ...

  7. XtraBackup原理4

    MySQL · 答疑解惑 · 物理备份死锁分析 背景 本文对 5.6 主备场景下,在备库做物理备份遇到死锁的case进行分析,希望对大家有所帮助. 这里用的的物理备份工具是 Percona-XtraB ...

  8. slots - Python的结构体 转

          上个月看了篇文章 “SAVING 9 GB OF RAM WITH PYTHON’S __SLOTS__”,原来Python也有类似结构体的东东.拖了一个月才写这篇,是因为太久没看pyth ...

  9. 如何将一个 ASP.NET MVC 4 和 Web API 项目升级到 ASP.NET MVC 5 和 Web API 2

    ----转自微软官网www.asp.net/mvc/ ASP.NET MVC 5 和 Web API 2 带来的新功能,包括属性路由. 身份验证筛选器,以及更多的主机.请参阅http://www.as ...

  10. 用scikit-learn实现朴素贝叶斯分类器 转

    原文:http://segmentfault.com/a/1190000002472791 朴素贝叶斯(Naive Bayes Classifier)是一种「天真」的算法(假定所有特征发生概率是独立的 ...