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 []:[email protected]			(邮箱)

  

七、测试单向认证
把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导入到浏览器里
导入的时候会要求输入密码,这是为了避免有人偷偷拷贝了别人的客户端证书,伪装成合法用户

时间: 2024-07-30 16:15:17

Linux下Apache https认证的相关文章

linux下apache https 虚拟主机配置

如果单纯只想在传输数据时加密传输,那么ssl证书是不需要认证的,但是浏览器打开时会有警告信息.假设我们做的不是一个公众产品那么也还好啦. 如下是今天学习时的一个笔记,其实我用的是真实环境. 环境:CentOS 64, 32bit:Apache 2.2.15: 1.检查apache是否安装了mod_ssl.so模块. 检查方法是查看是否在modules(/etc/httpd/modules/)下存在.不存在那么安装(yum -y install mod_ssl). 2.生成证书和密钥 1)生成密钥

linux下apache服务搭建

实验拓扑:                          Linux Client -----RHEL5.9(vmnet1)----------(vmnet1)                          Win7 Client 实验一:查看默认HTTP配置     找到默认红帽欢迎页面 (/etc/httpd/conf/httpd.conf ---->Include ----> /etc/httpd/conf.d  ----> welcome.conf  ----> /

linux下apache配置

Apache简介 Apache源于NCSAhttpd服务器,经过多次修改,成为世界上最流行的Web服务器软件之一.Apache取自"a patchy server"的读音,意思是充满补丁的服务器,因为它是自由软件,所以不断有人来为它开发新的功能.新的特性.修改原来的缺陷.Apache的特点是简单.速度快.性能稳定,并可做代理服务器来使用. 环境拓扑: LinuxClient ----------RHEL5.9(vmnet1)----------(vmnet1) Win7Client 前

Linux下LDAP统一认证解决方案

Linux下LDAP统一认证解决方案 --http://www.cangfengzhe.com/wangluoanquan/3.html 企业内部需要认证的服务很多,员工需要记住很多的密码, 即使对这些服务进行相同的密码设置,也存在很大的安全隐患.笔者目前工作的企业就是如此,每一个新员工的到来管理员都要初始化很多密码,而这些密码都被设置成了“888888”等弱密码,由于各种软件的认证机制之间没有使用一个统一的标准,员工无法一次性修改所有服务的密码,这导致很多即使是入职很久的员工都还在使用这个“众

Linux下apache安装

之前我介绍过apache abtest来做压力测试(http://www.cnblogs.com/super-d2/p/3831155.html) 但是怎么在linux下安装apache,一般而言Linux下安装apache需要源码安装: 首先,到apache的官网下载 apache源码包: http://httpd.apache.org/download.cgi#apache22 #chmod 755 httpd-2.0.54.tar.gz   (说明:给予更多的权限) #./configur

linux&nbsp;下&nbsp;apache启动、停止、重启命令

原文:linux 下 apache启动.停止.重启命令 基本的操作方法: 本文假设你的apahce安装目录为/usr/local/apache2,这些方法适合任何情况 apahce启动命令: 推荐/usr/local/apache2/bin/apachectl start apaceh启动 apache停止命令 /usr/local/apache2/bin/apachectl stop   停止 apache重新启动命令: /usr/local/apache2/bin/apachectl res

linux 下apache的安装

一.从apache官网上下载apache的安装包 下载apr和apr-util安装包,解压到apache的srclib目录,apache从2.4?开始把这个两个模块剥离 进入apache解压目录,./configure  --with-included-apr  --enable-so make make intall 二.写了一个简单的页面测试,但是发现html引用的图片(其他资源应该会有同样问题)被禁止访问,设了相关权限和配置仍没有效果 最后想到是不是selinux导致,把selinux禁用

linux下Apache服务器配置虚拟域名

在看laravel的某一个入门教程的时候,作者写道: 将网站根目录配置为 learnlaravel5/public. 本身而言,linux下Apache的根目录设置为/var/www/html,而laravel设置的访问目录是learnlaravel5/public.直接放在根目录下面,则访问打时候需要输入一长串,太麻烦.所以想着也配置下,跟作者似的,输入个www.nine.com也能访问. 1. 修改httpd.conf 可以直接在Apache配置文件的结尾添加如下代码,给Apache添加虚拟

Linux下apache+php搭建配置记录

linux下apache+php搭建配置记录 第1章  环境说明 1.1 系统说明 CentOS 6.4 1.2 软件说明 httpd-2.4.2.tar.gz apr-util-1.4.1.tar.gz apr-1.4.6.tar.gz pcre-8.13.tar.gz php-5.4.3.tar.bz2 libmcrypt-2.5.8.tar.gz mhash-0.9.9.9.tar.gz 第2章  Apache搭建说明 2.1 安装依赖包 yum install make openldap