apache添加ssl协议实现用户认证
目标
1对服务器的访问由http改为https,
2仅有证书的客户端可以访问服务器,
3.通过服务器端的配置,可以停用某个客户端的证书。
一 Apache服务器相关配置:
在../apache/conf/httpd.conf中,
1.关闭80端口,禁止通过http访问服务器,在Listen 80之前加上’#’,修改后如下:红色字体为修改之后的。
#Listen 0.0.0.0:80
#Listen [::]:80
#Listen 80
2.加载ssl模块,去掉之前的’#’,修改后如下:
LoadModule ssl_module modules/mod_ssl.so
LoadModule status_module modules/mod_status.so
3.包括ssl模块的配置文件
# Secure (SSL/TLS) connections
Include "conf/extra/httpd-ssl.conf"
4服务器目录访问权限设置;
htdocs目录访问限制。
<Directory "C:/xampplite/htdocs">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.2/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks Includes ExecCGI
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride All
#
# Controls who can get stuff from this server.
#
Order allow,deny
#Deny from all
Allow from all
</Directory>
服务器根目录访问限制
#
# Each directory to which Apache has access can be configured with respect
# to which services and features are allowed and/or disabled in that
# directory (and its subdirectories).
#
# First, we configure the "default" to be a very restrictive set of
# features.
#
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
#Deny from all
allow from all
</Directory>
在../apache/conf/extra/httpd-ssl.conf中
1.启用https访问,去掉#Listen 443之前的‘#’,修改后如下:
#Listen 0.0.0.0:443
#Listen [::]:443
Listen 443
2.配置服务器名:ServerName 如果基于IP访问填写如192.168.48.136:443,IP必须与证书上的commonName一致,否则访问时回弹出警告。
<VirtualHost _default_:443>
# General setup for the virtual host
DocumentRoot "C:/xampplite/htdocs"
ServerName l92.168.48.136:443
ServerAdmin webmaster@localhost
ErrorLog "logs/error.log"
<IfModule log_config_module>
CustomLog "logs/access.log" combined
</IfModule>
3.服务器证书相关配置:(具体证书文件名根据自己后面制作生成的而定)
SSLCertificateFile "conf/ssl.crt/server.crt" 服务器证书文件
SSLCertificateKeyFile "conf/ssl.key/server1.key" 服务器私钥文件
SSLCACertificateFile "conf/ssl.crt/ca.crt" ca证书文件
SSLCARevocationPath "conf/ssl.crl" 证书吊销列表路径
SSLCARevocationFile "conf/ssl.crl/client.crl" 证书吊销列表文件
4.用户认证配置修改如下:
# Client Authentication (Type):
# Client certificate verification type and depth. Types are
# none, optional, require and optional_no_ca. Depth is a
# number which specifies how deeply to verify the certificate
# issuer chain before deciding the certificate is not valid.
SSLVerifyClient require
SSLVerifyDepth 1
二 Openssl安装配置
1.安装xampp后里面自带了openssl模块。由于openssl是使用时需要调用C库函数,因此确认电脑上安装了,vc++6.0或者visual studio 2008.如果是在win xp下安装,xampp里面包含的php版本必须是v5.4或之前的.
路径:../apache/bin/openssl.conf
2.Openssl的配置,配置证书生成的文件的存储路径。
dir = c:/ca # Where everything is kept
3.申请证书时,需要填写证书信息,如果多次申请证书,这些证书的大部分信息相同(如果国家、城市等),可配置默认值,使用默认值是回车跳过就可以了,以下是我配置的例子:
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = CN
countryName_min = 2
countryName_max = 2
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = BeiJing
localityName = BeiJing (eg, city)
0.organizationName = companyName(eg, company)
0.organizationName_default = companyName
# we can do this but it is not needed normally :-)
#1.organizationName = Second Organization Name (eg, company)
#1.organizationName_default = World Wide Web Pty Ltd
organizationalUnitName = t3 (eg, section)
#organizationalUnitName_default =
commonName = Common Name (eg, YOUR name)
commonName_max = 64
emailAddress = XXX@xx.com
emailAddress_max = 64
# SET-ex3 = SET extension number 3
[ req_attributes ]
challengePassword = A challenge password
challengePassword_min = 4
challengePassword_max = 20
unstructuredName = An optional company name
注意事项:安装后配置文件格式为cnf,Win xp下因为无法正确识别文件而打不开,
解决办法:将此openssl.cnf文件(误识别为快速拨号文件)拖入到UltraEdit软件图标处打开,将文件另存为temp.conf格式,然后新建文件命名为openssl.conf,将temp.conf右键用写字板打开,全部复制到openssl.conf文件夹下,保存openssl.conf,然后将此文件放到../apache/bin目录下。temp.conf可以删除了.
三 生成CA证书的步骤:
1.生成CA证书的私钥(.key)和证书申请文件(.csr);(ps:因为我之前生成过ca.key,和ca.csr,所以这次就用cb.key和cb.csr,不过文件名无所谓)

2输入证书私钥保护密码:
私钥保护密码一定要牢记,利用用到证书私钥的地方必须输入私钥保护密码。

输入证书申请文件相关的信息:主要填写国家、省份、城市、公司名、部门、Common name(用户名)(此项必须手动输入,这是证书身份区别靠这项)、邮箱随便填、challenge password是什么不知道,之后没用到过,不过还是记住为好,最后一项备选公司名随便填了。如果以后证书申请文件的内容大部分相同,可以直接在openssl.conf配置文件中修改,进行默认配置,

3.使用根证书私钥对根证书私钥进行自签名

输入根证书私钥保护密码:

5接着连续输入y,确认

四 服务器端证书生成步骤:
1.生成服务器证书的私钥(.key)和证书申请文件(.csr);

输入证书申请文件相关信息:注意:如果服务器是基于域名访问,common name输入域名,如果基于IP地址访问,common name输入服务器对应的IP地址

2.用生成的CA证书给服务器证书签名。(ps:后面没有截取到的命令是 “.\openssl.conf”)
输入CA证书的私钥保护密码:

接下来连续输入y确认

3.如果apache是安装在linux下,跳过这一步,如果安装在windows环境下,则不能给CA私钥和服务器私钥设置保护密码,否则服务器无法启动,需要去掉密码,去掉CA私钥保护密码用如下命令:

去掉服务器密码,只需修改cb.key为server1.key.即可
然后将\ca\certs目录下的服务器证书和CA证书,拷贝到apache的..\apache\ssl.crt目录
将\ca\csr目录下的服务器证书申请文件server1.csr,拷贝到apache的..\apache\ssl.csr目录
将\ca\keys目录下的服务器私钥文件server..key,拷贝到apache的..\apache\ssl.key目录
五 客户端证书生成步骤:
1.生成客户端的私钥.key和证书申请文件.csr

2.输入私钥保护密码:
私钥保护密码必须牢记!!

3输入证书申请文件相关的信息:

4.使用根证书对个人证书进行签名:(ps:后面没有截取到的命令是 “.\openssl.conf”)
需要输入CA证书的私钥保护密码,后面的连续输入y


5.将客户端证书文件(公钥和用户信息)和私钥合并成pfx格式。

输入client2的私钥保护密码:
输入导入证书的密码并确认输入:

将生成的client.pfx的个人证书和ca.crt证书安装到PC浏览器或手机中。(ps:手机中安装,如果出现格式不支持,请参考链接:http://www.cnblogs.com/dosboy/archive/2013/03/05/2943963.html)
六 吊销证书:(即通过吊销证书来限制某个客户端对服务器的访问权限)
1.查看\ca目录下,打开index.txt文件,查看需要吊销证书的信息,尤其是序列号。
例如:
V 150506074352Z 05 unknown /C=CN/ST=BeiJing/O=linekong/CN=client3
可以看到client3的证书序列号为:05 而且当前证书状态是未吊销(前面第一个字母是V表示未吊销,吊销后为R)
打开\ca\cert目录后可以看到有个05.pem的文件。
2.通过这个命令查看将要吊销的证书内部的详细信息,进行最后确认。


3.输入一下命令吊销该证书

输入ca的私钥保护密码:

可以看到证书已经吊销:

4.更新证书吊销文件列表

输入ca证书私钥保护密码

可以看到证书吊销列表多出05号的证书

5.将client.crl文件复制到服务器目录下(我的是在..\apache\conf\ssl.crl目录下),并修改..apache\conf\extra目录下httpd-ssl.conf中的配置,修改后如下:
# Certificate Revocation Lists (CRL):
# Set the CA revocation path where to find CA CRLs for client
# authentication or alternatively one huge file containing all
# of them (file must be PEM encoded)
# Note: Inside SSLCARevocationPath you need hash symlinks
# to point to the certificate files. Use the provided
# Makefile to update the hash symlinks after changes.
SSLCARevocationPath "conf/ssl.crl"
SSLCARevocationFile "conf/ssl.crl/client.crl"
6.重启服务器。
注意事项:如果以后还要吊销其他由CA签发的证书时,前3步根据被吊销证书信息操作,第4步不变,因为由CA签发的证书被吊销后,统一都放在同一个证书吊销列表文件中,(如本例中是:client.crl)证书吊销列表文件更新后,需同时用最新的文件替换..\apache\conf\ssl.crl目录下原来的旧文件。否则被吊销的证书依然是可用的。
apache添加ssl协议实现用户认证的更多相关文章
- Centos 7 环境下,如何使用 Apache 实现 SSL 虚拟主机 双向认证 的详细教程:
1. testing ! ... 1 1 原文参考链接: http://showerlee.blog.51cto.com/2047005/1266712 很久没有更新LAMP的相关文档了,刚好最近单位 ...
- Apache添加ssl支持
安装证书文件说明:1. 证书文件xxx.pem,包含两段内容,请不要删除任何一段内容.2. 如果是证书系统创建的CSR,还包含:证书私钥文件xxx.key.证书公钥文件public.pem.证书链文件 ...
- 基于SSL协议的双向认证 - 双向认证 [3]
1 SSL双向认证的实现 这里是基于SSL和Tomcat配置实现的,配置方法如下: 1.1 生成CA数字证书 首先需要配置OPENSSL环境变量. 我的OPENSSL配置文件路径是“D ...
- 基于SSL协议的双向认证 - SSL协议 [1]
1 概要说明 在互联网通信方式中,目前用的最广泛的是HTTPS配合SSL和数字证书来保证传输和认证安全了. 2 详细介绍 2.1 HTTPS HTTPS全称:Hypertext Transf ...
- 基于X.509证书和SSL协议的身份认证过程实现(OpenSSL可以自己产生证书,有TCP通过SSL进行实际安全通讯的实际编程代码)good
上周帮一个童鞋做一个数字认证的实验,要求是编程实现一个基于X.509证书认证的过程,唉!可怜我那点薄弱的计算机网络安全的知识啊!只得恶补一下了. 首先来看看什么是X.509.所谓X.509其实是一种非 ...
- 基于SSL协议的双向认证 - 数字证书 [2]
1.1 数字证书 1.1.1 概念理解 一种文件的名称,例如一个机构或人的签名,能够证明这个机构或人的真实性.简而言之数字证书是一种网络上证明持有者身份的文件,同时还包括有公钥.证书是由国际 ...
- Linux下基于HTTP协议带用户认证的GIT开发环境设置
Git 的访问可以采用 HTTP 或 SSH 协议安全的访问,通常我们使用 gitlib 进行 Web 管理,但是在 Linux 命令行开发环境下,基本都是使用 SSH 协议,只需要在 gitlib ...
- Windows下Apache添加SSL模块
参考资料:http://www.yuansir-web.com/2011/05/12/hello-world/测试环境:windows2003 32位 + Apache2.4 + PHP5.4 一.准 ...
- 高级运维(二):搭建Nginx服务器、用户认证、基于域名的虚拟主机、SSL虚拟主机、Nginx反向代理
一.搭建Nginx服务器 目标: 在IP地址为192.168.4.5的主机上安装部署Nginx服务,并可以将Nginx服务器,要求编译时启用如下功能: 1> SSL加密功能 2> 设置Ng ...
随机推荐
- 小程序自定义tabbar custom-tab-bar 6s出不来解决方案,cover-view不兼容
1.从微信小程序的官网扣下来的demo,实际测试中,发现6s ios10 系统不兼容,里面的内容出不来 <cover-view class="tab-bar"> < ...
- 景点API支持查询携程旅游门票景点详情
门票景点详情,景点api支持查询携程旅游门票景点详情. 接口名称:景点api 接口平台:开放api 接口地址:http://api2.juheapi.com/xiecheng/senicspot/ti ...
- Nginx 反向代理功能-实现Nginx tcp负载均衡
Nginx 反向代理功能-实现Nginx tcp负载均衡 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- MySQL 事务配置命令行操作和持久化
MySQL 事务配置命令行操作和持久化 参考 MySQL 官方参考手册 提供 5.5 5.6 5.7 8.0 版本的参考手册 https://dev.mysql.com/doc/refman/5.5/ ...
- Django Model的外键自关联‘self'和设置'unique_together'
在django的model定义中,有时需要某个Field引用当前定义的Model,比如一个部门(Department)的Model,它有一个字段是上级部门(super_department),上级部门 ...
- ORA-00923: FROM keyword not found where expected
网上搜索这类错误还是挺多的,只提供我遇到的一种情景. 本地数据库环境:Oracle10g 导入别人的项目后,有一段SQL查询总是报如下错误信息: Cause: java.sql.SQLExceptio ...
- mysql数据库锁的机制-及事务事件
事务隔离级别,脏读.不可重复读.幻读,乐观锁.悲观锁(共享锁.排它锁) 数据库事务具有四个特征,分别是原子性(Atomicity).一致性(Consistency).隔离性(Isoation).持久性 ...
- linux学习18 shell脚本基础-bash变量和逻辑运行
一.回顾 1.用户管理,权限管理,install,mktemp 2.用户管理: 3.权限管理: mode,ownership mode: user group other r w x 4.命令:ins ...
- cc2530的第三次实验,按键中断控制流水灯
cc2530的第三次实验:按键中断控制流水灯 效果为按一次按键,流水灯亮一次 实验相关电路图: 实验相关寄存器: 初始化函数 //初始化LED灯 //设置P1SEL,通用为0,外设为1 1111110 ...
- BZOJ 4826: [Hnoi2017]影魔 单调栈+可持久化线段树
Description 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他收集了各式各样 的灵魂,包括诗人.牧师.帝王.乞丐.奴隶.罪人,当然,还有英雄.每一个 ...