`
thierry.xing
  • 浏览: 656113 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
580fa9c1-4a0c-3f40-a55a-c9256ce73302
Sencha Touch中...
浏览量:0
社区版块
存档分类
最新评论

Apache2.0实现https+Apache http访问转到https

 
阅读更多

首先安装SSL,再编译安装APACHE,再配置证书即可

1. 下载安装apache和openssl
网址:http://www.apache.org,http://www.openssl.org
#tar zxvf httpd-2.0.54.tar.gz
#tar zxvf openssl-0.9.7g.tar.gz
编译安装openssl,这个软件主要是用来生成证书
#cd openssl-0.9.7g
#./config
#make
#make test
#make install
把 openssl放进内核目录下,使其在任何目录下都能运行。
#cd /usr/local/bin
#ln -s /usr/local/ssl/bin/openssl openssl
编译安装apache
#cd /opt/httpd-2.0.54
#./configure --prefix="/opt/apache2" --enable-so --enable-ssl --with-ssl="/usr/local/ssl/bin"
#make
#make install



2. 安装完毕,生成证书:

在/opt/apache2/conf下建立一个ssl.key目录
#cd ../apache2/
#cd conf/
#mkdir ssl.key
然后在该目录下生成证书:
#cd ssl.key/
生成服务器私钥:
#openssl genrsa -des3 -out server.key 1024
Generating RSA private key, 1024 bit long modulus
.......................++++++
.................................................++++++
e is 65537 (0x10001)
Enter pass phrase for server.key: //密码
Verifying - Enter pass phrase for server.key: //确认和上面密码相同
生成服务器证书请求,并按要求填些相关证书信息:
#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
State or Province Name (full name) [Some-State]:BJ
Locality Name (eg, city) []:BJ
Organization Name (eg, company) [Internet Widgits Pty Ltd]:163
Organizational Unit Name (eg, section) []:TD
Common Name (eg, YOUR name) []:a.test.com//行使 SSL 加密的网站地址。请注意这里并不是单指您的域名,而是直接使 
                                                                       用 SSL 的网站名称 例如:pay.abc.com。 一个网站这里的定是:abc.com
                                                                       是一个网站;www.abc.com 是另外一个网站;pay.abc.com 又是另外一个
                                                                       网站。

Email Address []:lala@corp.netease.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:**********
An optional company name []:126

签证:
# openssl x509 -req -days 700 -in server.csr -signkey server.key -out server.crt
Signature ok
subject=/C=AU/ST=Some-State/L=tyl/O=tz/OU=tz/CN=tyl/emailAddress=tangyl@ruyi.com
Getting Private key
Enter pass phrase for server.key: //输入创建key时的密码



3. 修改httpd.conf文件
Apache一般有2个版本下载,一个是带SSL模块的,一个是不带SSL的,请首先检查自己的SSL是包含了SSL模块的,否则就没法做了。 Apache的参数配置都在httpd.conf文件中,SSL配置也是如此,此外还可以通过include httpd-ssl.conf来包含一个专门配置SSL的配置文件,如果激活了httpd-include ssl.conf,则可以打开httpd-ssl.conf来配置相应参数。

一般,我们直接在httpd.conf文件中直接配置SSL参数:
#加载模块mod_ssl.so,此模块是启用SSL功能必须的。
LoadModule ssl_module modules/mod_ssl.so //静态编进apache内核的则不需要此段
#监听443端口
Listen 443
#建立一个SSL的虚拟站点,避免SSL配置影响原来HTTP的站点配置
<VirtualHost _default_:443>
DocumentRoot "C:/Program Files/Apache2/htdocs"
ServerName www.myssl.cn:443
SSLEngine on
#SSLCertificateFile /opt/apache2/conf/ssl.crt/server.crt  #108行
SSLCertificateFile /opt/apache2/conf/ssl.key/server.crt

#SSLCertificateFile /opt/apache2/conf/ssl.crt/server-dsa.crt

SSLCertificateKeyFile /opt/apache2/conf/ssl.key/server.key   #116行

#SSLCertificateKeyFile /opt/apache2/conf/ssl.key/server-dsa.key

#SSLCertificateChainFile "C:/SSL/chain.cer"
ErrorLog "C:/Program Files/Apache2/logs/error.log"
TransferLog "C:/Program Files/Apache2/logs/access.log"
</VirtualHost>

#说明主站是使用HTTP通信的,只有上面虚拟站点有SSL
SSLEngine off                               
    
配置参数说明如下(完整的SSL配置参数见这里):
    * Listen 443:
      SSL协议监听的端口,同下面 Virtualhost 中的端口需要匹配,SSL协议缺省使用443端口,也有使用8443的情况。
    * SSLEngine on:
      SSL功能打开,如果在Virtualhost 出现这句,则仅作用于虚拟机站点配置范围,这个虚拟机站点全部使用SSL通信,如果出现在Virtualhost外,则作用于全局,整个服务器都使用 SSL(HTTPS)通信,不能采用HTTP通信,所以通常都在Virtualhost中加这句。
    * SSLCertificateFile:证书文件,server.crt
    * SSLCertificateKeyFile:私钥文件,server.key
    * SSLCertificateChainFile:证书链文件,GeoTrust证书除了EV以外,都是单根证书,都不需要配置这个参数,如果是EV
                                            证书,则需要加入EV的证书链。
    * Errorlog,TranksferLog:日志文件
    * SSLEngine off:整个站点,除了虚拟站点外,关闭SSL,仍然支持HTTP通信



4. 重新启动Apache
如果是在Linux下,输入:
apachectl stop
apachectl startssl

Server a.test.com:443 (RSA)
Enter pass phrase:
//输入创建证书和密钥时的密码,正确输入后ssl就连同apache一起启动
在浏览器中输入:https://220.181.75.119
要求下载证书,OK~https建立就完成了

 
注意:可以去掉每次启动时要输入证书私钥的 pass phrase
#cp server.key  server.key.secure 
#/usr/bin/openssl rsa -in server.key.secure  -out server.key
 


5. 客户端证书认证
(1)基本客户证书认证
强制客户对整个站点都必须采用客户证书认证的方式,可以在原来的配置下增加如下参数:
<VirtualHost _default_:443>
......
# 需要客户有一个客户端证书,并由ca.cer这个CA证书签署
SSLVerifyClient require
SSLVerifyDepth 1
SSLCACertificateFile conf/ssl.crt/ca.cer 
</VirtualHost>

(2)如果只要求对特定目录采用客户证书认证方式,其他目录都不需要客户端证书,则可以采用如下配置:

<VirtualHost _default_:443>
......
# 需要客户有一个客户端证书,并由ca.cer这个CA证书签署
SSLVerifyClient none
SSLCACertificateFile conf/ssl.crt/ca.crt
<Location /secure/area>
SSLVerifyClient require
SSLVerifyDepth 1
</Location>
</VirtualHost>


6. 强制HTTPS访问
强制HTTPS访问,主要通过将用户访问的HTTP请求自动转换为HTTPS请求,有两种方式:一种是通过编程的方式,详见:"强制用户通过SSL访问网站" ; 另一种方式则是通过Apache强大的Rewrite功能。

如果要针对整个网站全部执行HTTP自动转为HTTPS的功能,可以在httpd.conf文件中,增加:
RewriteEngine on
RewriteCond   %{HTTPS} !=on
RewriteRule   ^(.*)  https://%{SERVER_NAME}$1 [L,R]

如果,仅要求对\secure目录下的内容强制采用HTTPS访问,可以在httpd.conf文件中加入如下语句:
<Directory "C:\Program Files\htdocs\secure">
RewriteEngine on
RewriteCond   %{HTTPS} !=on
RewriteRule   ^(.*)  https://%{SERVER_NAME}/secure/$1 [L,R]
</Directory>


7. 访问控制举例
如何对来自Internet并要访问Intranet的客户强制采用强加密的HTTPS通信,并采用基本或者客户证书的认证方式?同时还要确保来自 Intranet的客户可以进行HTTP访问?
假设IntranetIP地址段是192.160.1.0/24,Intranet站点子区域的URL是/subarea ,则可以在HTTPS虚拟主机站点以外增加如下配置(这样可以同时作用于HTTPS和HTTP):
SSLCACertificateFile conf/ssl.crt/company-ca.crt
<Directory /usr/local/apache2/htdocs>
# subarea以外的区域只允许来自Intranet的访问
Order                deny,allow
Deny                 from all
Allow                from 192.168.1.0/24
</Directory>

<Directory /usr/local/apache2/htdocs/subarea>
# 在subarea以内,允许所有来自Intranet的访问,
# 但对来自Internet的访问,仅允许HTTPS+Strong-Cipher+Password
# 或者HTTPS+Strong-Cipher+Client-Certificate
# 如果使用了HTTPS,则确保使用高强度加密
# 同时允许客户以基本认证的形式认证
SSLVerifyClient      optional
SSLVerifyDepth       1
SSLOptions           +FakeBasicAuth +StrictRequire
SSLRequire           %{SSL_CIPHER_USEKEYSIZE} >= 128

# 强制来自Internet的客户使用HTTPS
RewriteEngine        on
RewriteCond          %{REMOTE_ADDR} !^192\.168\.1\.[0-9]+$
RewriteCond          %{HTTPS} !=on
RewriteRule          ^(.*)  https://%{SERVER_NAME}$1 [L,R]

# 允许网络访问和基本认证
Satisfy              any
# 控制网络访问
Order                deny,allow
Deny                 from all
Allow                192.168.1.0/24
# HTTP基本认证
AuthType             basic
AuthName             "Protected Intranet Area"
AuthBasicProvider    file
AuthUserFile         conf/protected.passwd
Require              valid-user
</Directory>

 

【转--https的传输原理】人们常常在使用网上银行时看到的连接都是以“https”开始的,那么这个https是什么呢?这其实是表示目前连接使用了SSL进行加密,能保证客户端到服务器端的通信都在被保护起来,那么浏览器是如果实现的呢?下面我们介绍一下SSL的基本实现方法。

首先我们有两种基本的加解密算法类型:对称加密,非对称加密(公私钥加密),现在介绍一下这两种加密算法的特点:

对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等,示意图如下:


图1 对称加密

非对称加密:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等,示意图如下:


图2 非对称加密

根据上面的两种加密方法,现在我们就可以设计一种无法让他人在互联网上知道你的通讯信息的加密方法:

  1. 在服务器端存在一个公钥及私钥

  2. 客户端从服务器取得这个公钥

  3. 客户端产生一个随机的密钥

  4. 客户端通过公钥对密钥加密(非对称加密)

  5. 客户端发送到服务器端

  6. 服务器端接受这个密钥并且以后的服务器端和客户端的数据全部通过这个密钥加密(对称加密)

    HTTPS通信过程的时序图如下:


    图3 HTTPS通信时序图

正如上图所示,我们能保证下面几点:

  1. 客户端产生的密钥只有客户端和服务器端能得到

  2. 加密的数据只有客户端和服务器端才能得到明文

  3. 客户端到服务端的通信是安全的

当然实际的SSL实现算法复杂的多,并有数据校验、身份验证等功能,如果需要更多了角请参看RFC2246及RFC4346文档。

 

 

Apache http访问转到https

Apache 实现http访问转到https ,可以用 Rewrite 模块。配置经过如下:

1.httpd.conf中增加如下语句,如果有就不用加了

LoadModule rewrite_module modules/mod_rewrite.so

一、针对整站的
在 VirtualServer 加上如下语句:

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

二、针对某些目录的

在这个目录内,添加如下
RewriteEngine on
RewriteBase /test
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

另也可以在.htaccess添加如下语句来实现

RewriteEngine on

RewriteBase /test

RewriteCond %{SERVER_PORT} !^443$

RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

最后重新启动apache服务,访问http测试成功转换成httpd

分享到:
评论

相关推荐

    Springboot2.0+redis+SpringMVC+Spring+Mybatis+Mybatis

    是以Spring Framework为核心容器,Spring MVC为模型视图控制器,Mybatis为数据访问层, Apache Shiro/Spring security为权限授权层,Ehcahe/Redis/Hazelcast对常用数据进行缓存,Disruptor作为并发框架,Bootstrap...

    Apache2.0中文手册

    认证(Authentication) 对诸如服务器、客户端或...这是一个perl脚本,用于编译模块源代码为动态共享对象(Dynamic Shared Objects)(DSO),并帮助安装到Apache网络服务器中。 见: Manual Page: apxs 证书(Certificate)

    ApacheV2.0中文手册

    Apache 2.0 版本的新特性 从 2.0 升级到 2.2 Apache许可证 参考手册 编译与安装 启动 停止与重新启动 运行时配置指令 指令速查 模块索引 多路处理模块(MPM) 过滤器 处理器 服务器与工具 词汇表 用户...

    Apache HTTP Server Version 2.2 文档(2013.4.10最新)

    将模块从Apache1.3转化到Apache2.0 Apache 2.0 对请求的处理 Apache 2.0 线程安全问题 经常问到的问题 认证、授权、访问控制 CGI动态页面 .htaccess文件 如何.../指南 用户网站目录 服务器端包含入门 关于DNS和...

    Permission Base(授权基础,以下简称PB)是一个基于.NET 2.0平台开发的开源项目,使用的协议为:Apache License Version 2.0。

    1.概述Permission Base(授权基础,以下简称PB)是一个基于.NET 2.0平台开发的开源项目,使用的协议为:Apache License Version 2.0。 PB是一套适用于一般中小型B/S企业应用系统的“权限控制基础结构”。PB的定位并...

    apache-phoenix-5.0.0-HBase-2.0-bin.tar.gz

    Apache Phoenix是构建在HBase之上的关系型数据库层,作为内嵌的客户端JDBC驱动用以对HBase中的数据进行低延迟访问。Apache Phoenix会将用户编写的sql查询编译为一系列的scan操作,最终产生通用的JDBC结果集返回给...

    apache中文手册(html)

    Apache 2.0 版本的新特性 从 2.0 升级到 2.2 Apache许可证 参考手册 编译与安装 启动 停止与重新启动 运行时配置指令 指令速查 模块索引 多路处理模块(MPM) 过滤器 处理器 服务器与工具 词汇表 用户...

    php配置+mysqlAdmin配置+apache配置的实现教程

    注意默认端口是80 安装成功后启动apache访问http://127.0.0.1及安装成功 3。 apache的配置文件\conf\httpd.conf apache的默认的项目存放目录\htdocs\ &lt;br&gt;2)apache的一些常用配置...

    Apache2.2中文版参考手册

    Apache 2.0 版本的新特性 从 2.0 升级到 2.2 Apache许可证 参考手册 编译与安装 启动 停止与重新启动 运行时配置指令 指令速查 模块索引 多路处理模块(MPM) 过滤器 处理器 服务器与工具 词汇表 用户...

    Apache HTTP Server Binary V2.0.55

    最流行的免费Web服务器软件。快速、可靠、可通过简单的 API 扩展,Perl/Python 解释器可被编译到服务器中,完全免费,完全源代码开放。如果你需要创建一个每天有数百万人访问的 Web 服务器,Apache 可能是最佳选择。

    Apache22Passwd-远程修改基于Apache配置的Subversion的用户密码。

     目前提供for apache2.0版本及for apache2.2版本。  当Subversion配置成作为Apache的一个模块运行时,在httpd.conf中可能是类似这下面这样的语句:   DAV svn SVNParentPath C:\SVN_repos AuthType Basic ...

    Apache2.2中文手册

    Apache HTTP Server Version 2.2 文档 版本说明 Apache 2.1/2.2 版本的新特性 Apache 2.0 版本的新特性 从 2.0 升级到 2.2 Apache许可证 参考手册 编译与安装 启动 停止与重新启动 运行时配置指令 指令速查...

    Apache2.2中文参考.chm

    Apache 2.0 版本的新特性 从 2.0 升级到 2.2 Apache许可证 参考手册 编译与安装 启动 停止与重新启动 运行时配置指令 指令速查 模块索引 多路处理模块(MPM) 过滤器 处理器 服务器与工具 词汇表 用户...

    蓝海豚Lht_CV2.0_1231商业版_-_模板2套

    Lht_CV2.0 整合UCenter[GBK]实现步骤 +———————————-+ 登录UCenter用户管理中心(http://你的域名/ucenter)进行如下配置: (1)进入“管理应用”—“添加新应用”—选择安装方式(自定义安装)配置 只需...

    Apache 2.2 中文手册

    * Apache 2.0 版本的新特性 * 从 2.0 升级到 2.2 * Apache许可证 参考手册 * 编译与安装 * 启动 * 停止与重新启动 * 运行时配置指令 * 指令速查 * 模块索引 * 多路处理模块(MPM) * 过滤器 * 处理器 *...

    Apache安装及JBOSS部署说明文档.rar

    1 .Apache2.0及连接器jk1.2的编译部署 4 1.1下载相关软件包 4 1.2 apache2.0的编译安装 4 1.3 jk1.2.14的编译安装 6 1.4 apache及jk1.2的参数配置 6 1.4.1.httpd.conf的修改 6 1.4.2.mod_jk2.conf的所有内容 7...

    go-qemu:使用QEMU机器协议(QMP)进行打包以与QEMU进行交互。 Apache 2.0许可

    Apache 2.0许可。 如果您想讨论该项目, 随时加入我们在 。 安装 使用go get检索go-qemu所有软件包: $ go get github.com/digitalocean/go-qemu/... 概述 以下是每个顶级程序包及其用途的快速概述: hypervisor...

    apache-tomcat-7.0.94

    Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat ...

    Apache HTTP Server for Linux V2.0.49

    最流行的Web服务器软件。...Apache快速、可靠、可通过简单的API扩展,Perl/Python解释器可被编译到服务器中,完全免费,完全源代码开放。如果你需要创建一个每天有数百万人访问的Web服务器,Apache可能是最佳选择。

    apache-tomcat-8.0.48

    Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat ...

Global site tag (gtag.js) - Google Analytics