Linux下Apache https认证
参考:http://kyfxbl.iteye.com/blog/1910891 http://showerlee.blog.51cto.com/2047005/1266712
一、环境
httpd:Apache2.4.10
openssl:1.0.1
OS:CentOS5.7
四、在httpd中配置单向HTTPS
1、编辑 httpd.conf,分别查找下面2行代码,并去掉前面的#,(这里的前提是,在编译httpd的时候,已经编译了ssl模块)
vim /usr/local/apache/conf/httpd.conf
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule socache_dbm_module modules/mod_socache_dbm.so
LoadModule socache_memcache_module modules/mod_socache_memcache.so
LoadModule ssl_module modules/mod_ssl.so Include conf/extra/httpd-ssl.conf <IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
2、vim /usr/local/apache/conf/extra/httpd-ssl.conf
SSLEngine on
SSLCertificateFile "/usr/local/httpd/conf/server.cer"
SSLCertificateKeyFile "/usr/local/httpd/conf/server.key.pem"
#SSLCACertificateFile "/usr/local/httpd/conf/ca.cer"
#SSLVerifyClient require
#SSLVerifyDepth 10
只要开启前3个,单向的HTTPS认证就配置好了。后面3个目前先注释掉,是后面双向认证才用到,然后重启一下httpd,会发现报错:
AH00526: Syntax error on line 106 of /usr/local/httpd/conf/extra/httpd-ssl.conf:
SSLCertificateFile: file '/usr/local/httpd/conf/server.cer' does not exist or is empty
这是因为httpd需要一个服务端的私钥(.key.pem),和一个服务端证书(.cer)。前面已经配置了这2个文件的路径,但是还没有创建。下一步就要创建这些文件
五、创建CA(Certificate Authority)
1、准备工作
在/usr/local/下创建以下几个子目录: /private ,/certificates
2、创建CA私钥
openssl genrsa -aes256 -out private/ca.key.pem 2048
输入密码:111111 (密码可以为空) 或者 命令自带密码( -passout pass:111111 )
openssl genrsa -aes256 -passout pass:111111 -out private/ca.key.pem 2048
3、创建CA签名请求
openssl req -new -key private/ca.key.pem -out private/ca.csr -subj "/C=CN/ST=SZ/L=SZ/O=pldsec/OU=pldsec/CN=*.pldsec.com"
此处回车之后是需要输入上面的ca私钥密码的,后面一定要加上双引号 或者( -passin pass:111111 )
openssl req -passin pass:111111 -new -key private/ca.key.pem -out private/ca.csr -subj "/C=CN/ST=SZ/L=SZ/O=pldsec/OU=pldsec/CN=*.pldsec.com"
这里要注意的是,如果不用-subj参数,那么就会在命令行交互输入签发目标的身份识别信息,这叫DN(Distinguished Name)。其中别的都不要紧,最重要的是CN那一行,因为我这里是根证书,所以我设置为*.pldsec.com,这样我后面用这个CA签发的www.pldsec.com、game.pldsec.com、news.pldsec.com……,全都是有效的
4、自己签发CA根证书
openssl x509 -req -days 3650 -sha1 -extensions v3_ca -signkey private/ca.key.pem -in private/ca.csr -out certificates/ca.cer 或者( -passin pass:111111)
openssl x509 -req -days 3650 -sha1 -extensions v3_ca -signkey private/ca.key.pem -in private/ca.csr -out certificates/ca.cer -passin pass:111111
5、把根证书从PEM编码转为PKCS编码
openssl pkcs12 -export -cacerts -inkey private/ca.key.pem -in certificates/ca.cer -out certificates/ca.p12 或者(-passin pass:111111 -passout pass:111111)
openssl pkcs12 -export -cacerts -inkey private/ca.key.pem -in certificates/ca.cer -out certificates/ca.p12 -passin pass:111111 -passout pass:111111(先验证原有密码,在重新设置新密码,新密码和旧密码可以相同,也可以不同)
六、签发服务端证书
1、创建服务端私钥
openssl genrsa -aes256 -out private/server.key.pem 2048 或者( -passout pass:111111 注意 -passout pass:111111的位置)
openssl genrsa -aes256 -passout pass:111111 -out private/server.key.pem 2048
2、创建服务端证书签发请求
openssl req -new -key private/server.key.pem -out private/server.csr -subj "/C=CN/ST=SZ/L=SZ/O=pldsec/OU=pldsec/CN=www.pldsec.com" 或者 ( -passin pass:111111 )
openssl req -passin pass:111111 -new -key private/server.key.pem -out private/server.csr -subj "/C=CN/ST=SZ/L=SZ/O=pldsec/OU=pldsec/CN=www.pldsec.com"
和ca.csr的区别在于,这里的CN不是*.pldsec.com,而是www.pldsec.com,因为我现在是在为www.pldsec.com申请证书
3、利用CA根证书,签发服务端证书
openssl x509 -req -days 3650 -sha1 -extensions v3_req -CA certificates/ca.cer -CAkey private/ca.key.pem -CAserial ca.srl -CAcreateserial -in private/server.csr -out certificates/server.cer 或者( -passin pass:111111 )
openssl x509 -req -days 3650 -sha1 -extensions v3_req -CA certificates/ca.cer -CAkey private/ca.key.pem -CAserial ca.srl -CAcreateserial -in private/server.csr -out certificates/server.cer -passin pass:111111
4、重启Apache
/usr/local/apache2/bin/apachectl start
假如此时又出错:
Syntax error on line 95 of /usr/local/apache/conf/extra/httpd-ssl.conf:
SSLCertificateFile: file '/usr/local/apache/conf/server.crt' does not exist or is empty
这是因为在启动https时,需要一个证书,而我们还没有为这个网站生成一个证书,为了测试,下面将用openssl生成一个自签名的证书:
cd /usr/local/apache/conf/
sudo openssl req -new -x509 -nodes -out server.crt -keyout server.key
下面openssl会要求为证书输入一些相关信息:
Country Name (2 letter code) [XX]:CH (国家)
State or Province Name (full name) []:ZheJiang (省份)
Locality Name (eg, city) [Default City]:Hangzhou (城市)
Organization Name (eg, company) [Default Company Ltd]:PLDSEC (组织名称)
Organizational Unit Name (eg, section) []:pldsec (组织单位名称)
Common Name (eg, your name or your server's hostname) []:pldsec (通用名)
Email Address []:www@pldsec.com (邮箱)
七、测试单向认证
把server.key.pem和server.cer拷贝到/usr/local/httpd/conf/目录下,然后启动httpd,会要求输入一个密码(创建私钥的密码)
然后https://IP 访问(测试HTTP是否正常跳转到HTTPS)
1、apache设置自动将http跳转到https的方法
vim /usr/local/apache/conf/httpd.conf
找到
<Directory "Apache的环境目录">
AllowOverride All #这里原先是None要改为All
在网站根目录下创建.htaccess文件,在最下面添加写入如下语句:
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/?(.*)$ https://%{SERVER_NAME}/$1 [L,R]
重启Apache,如果重启时报错,则找到#LoadModule rewrite_module modules/mod_rewrite.so,将前面的#号去掉,然后重启
八、配置双向认证
vim /usr/local/apache/conf/extra/httpd-ssl.conf SSLCACertificateFile "/usr/local/httpd/conf/ca.cer"
SSLVerifyClient require
SSLVerifyDepth 10
九、签发客户端证书
1、创建客户端私钥,用户:aaa,密码:aaaaaa
openssl genrsa -aes256 -out private/aaa.key.pem 2048 或者(给aaa用户创建一个客户端私钥 密码为aaaaaa)
openssl genrsa -aes256 -passout pass:aaaaaa -out /usr/local/private/aaa.key.pem 2048
2、创建客户端证书签发请求
openssl req -new -key private/aaa.key.pem -out private/aaa.csr -subj "/C=CN/ST=SZ/L=SZ/O=pldsec/OU=pldsec/CN=aaa" 或者(-passin pass:aaaaaa)
openssl req -passin pass:aaaaaa -new -key private/chenchao.key.pem -out private/aaa.csr -subj "/C=CN/ST=SZ/L=SZ/O=pldsec/OU=pldsec/CN=aaa"
3、利用CA根证书,签发客户端证书
openssl x509 -req -days 3650 -sha1 -extensions v3_req -CA certificates/ca.cer -CAkey private/ca.key.pem -CAserial ca.srl -CAcreateserial -in private/aaa.csr -out certificates/aaa.cer 或者( -passin pass:111111 输入服务端CA证书私钥密码 )
openssl x509 -req -days 3650 -sha1 -extensions v3_req -CA certificates/ca.cer -CAkey private/ca.key.pem -CAserial ca.srl -CAcreateserial -in private/aaa.csr -out certificates/aaa.cer -passin pass:111111
4、把客户端证书转换成p12格式
openssl pkcs12 -export -clcerts -inkey private/aaa.key.pem -in certificates/aaa.cer -out certificates/aaa.p12 或者 (-passin pass:aaaaaa -passout pass:bbbbbb 先输入客户端密码,然后重置密码,旧密码和新密码可以相同,也可以不同)
openssl pkcs12 -export -clcerts -inkey private/aaa.key.pem -in certificates/aaa.cer -out certificates/aaa.p12 -passin pass:aaaaaa -passout pass:bbbbbb
这步是必须的,因为稍后就需要把客户端证书导入到浏览器里,但是一般浏览器都不能直接使用PEM编码的证书
十、测试双向认证
把ca.cer拷贝到%HTTPD_HOME%/conf/目录下,重启httpd
cp /usr/local/certificates/ca.cer /usr/local/apache/conf/
接下来要把client.p12导入到浏览器里
导入的时候会要求输入密码,这是为了避免有人偷偷拷贝了别人的客户端证书,伪装成合法用户
Linux下Apache https认证的更多相关文章
- linux下apache https 虚拟主机配置
如果单纯仅仅想在数据传输时加密传输,那么ssl证书是不须要认证的,可是浏览器打开时会有警告信息.如果我们做的不是一个公众产品那么也还好啦. 例如以下是今天学习时的一个笔记,事实上我用的是真实环境. 环 ...
- Linux下LDAP统一认证解决方案
Linux下LDAP统一认证解决方案 --http://www.cangfengzhe.com/wangluoanquan/3.html 转自:http://www.cnblogs.com/MYSQL ...
- linux 下 apache相关;启动、停止、重启命令;配置文件位置等等
linux 下 apache启动.停止.重启命 基本的操作方法: 本文假设你的apahce安装目录为/usr/local/apache2,这些方法适合任何情况 apahce启动命令: 推荐/usr/l ...
- Linux下apache+phppgadmin+postgresql安装配置
Linux下apache+phppgadmin+postgresql安装配置 操作系统:CentOS 安装包:httpd(首选yum), php(包括php以及php-pgsql,php-mbstri ...
- 分享:linux下apache服务器的配置和管理
linux下apache服务器的配置和管理. 一.两个重要目录: Apache有两个重要的目录:1.配置目录/etc/httpd/conf:2.文档目录/var/www: 二.两种配置模式: Apac ...
- linux 下apache安装、启动和配置
linux 下 apache安装 1:系统安装,这里就不说了,网上有很多,也很简单.顺便说下,我用的是redhat 9: 2:在图形界面下下载apache 安装包,我下的是 httpd-2.2.9.t ...
- linux 下 apache启动、停止、重启命令
原文:linux 下 apache启动.停止.重启命令 基本的操作方法: 本文假设你的apahce安装目录为/usr/local/apache2,这些方法适合任何情况 apahce启动命令: 推荐/u ...
- windows下apache+https环境配置
windows下apache+https环境配置 转 https://www.cnblogs.com/sandaizi/p/7519370.html 1.修改配置文件conf/httpd.conf,去 ...
- [Linux]Linux下Apache服务器配置
Linux下Apache服务器配置 相关包: httpd-2.2.3-29.e15.i386.rpm //主程序包 httpd-devel-2.2.3-29.e15.i ...
随机推荐
- 低版本浏览器支持HTML5标签的方法
最近刷了一道面试题,是关于低版本浏览器支持HTM5标签的写法,在网上找了一些,都行之有效,但是缺少整体总结,所以在这里总结一下,方便其他人过来阅读. IE低版本需要支持HTML5标签: 方法1.传统引 ...
- 32位汇编第三讲,RadAsm,IDE的配置和使用,以及汇编代码注入方式
32位汇编第三讲,RadAsm,IDE的配置和使用,以及汇编代码注入方式 一丶RadAsm的配置和使用 用了怎么长时间的命令行方式,我们发现了几个问题 1.没有代码提醒功能 2.编写代码很慢,记不住各 ...
- poj 1200字符串hash
题意:给出不同字符个数和子串长度,判断有多少个不同的子串 思路:字符串hash. 用字符串函数+map为什么会超时呢?? 代码: #include <iostream> #include ...
- C# 委托、匿名方法、lambda简介
在.NET中,委托,匿名方法和Lambda表达式很容易发生混淆.我想下面的代码能证实这点.下面哪一个First会被编译?哪一个会返回我们需要的结果?即Customer.ID=5.答案是6个First不 ...
- python tornado 实现类禅道系统
最近楼主加班 喽, 好久没有更新我的博客了,哎,一言难尽,废话我就不说了,来开始上精华. 背景:目前市面上有很多bug管理工具,但是各有各的特点,最著名,最流行的就是禅道,一个偶然的机会接触到了pyt ...
- 交换机的Ethernet Channel
端口聚合也叫做以太通道(ethernet channel),主要用于交换机之间连接.由于两个交换机之间有多条冗余链路的时候,STP会将其中的几条链路关闭,只保留一条,这样可以避免二层的环 路产生.但是 ...
- MPLS VPN随堂笔记3
跨域 ASBR之间运行MPBGP 1.配置AS内部IGP保证环回口互相可达,同时建立LDP邻居 (优先启用 mpls label rang 16 100)方便查看实验现象 2.配置PE1-PE2 PE ...
- 【集美大学1411_助教博客】团队作业1——团队展示&选题 成绩
第一次团队作业已经新鲜出炉啦,各位同学请查收.截止日期前,全班都按时提交了作业,而且有的团队还提交了两次呢,下次不要这样啦~ 题目 团队作业1--团队展示&选题 回顾 个人作业1--四则运算题 ...
- 团队作业8——第二次项目冲刺(Beta阶段)Day1--5.18
1.展开站立式会议: 会议内容:①团队里的新成员做简单的自我介绍. ②讨论每天的任务分配问题. ③提出一个严格要求:博客一定要及时发布,并及时提交作业,遇到困难可以提出来一起解决. ④就现阶段的项目进 ...
- [js高手之路]Node.js模板引擎教程-jade速学与实战3-mixin
强大的mixin mixin类似于函数的功能,可以达到模块复用的效果 mixin show: 定义一个类似函数的功能,名字叫show,里面的就是他的内容 +show: 调用show,每调用一次执行一次 ...