环境:rhel5.4 httpd-2.2. 3mod-ssl
原理:
第一步:AB双方商量使用什么加密算法,怎么加密等等。 第二步:A发送证书给B,为了使B相信他。 第三步:B相信了,就生成对称密钥,将请求页面发送给A。 最后,A使用B发送的密钥加密后,将请求回应给B。
由于B要验证A的身份,因此,这里引入了第三方权威颁发机构,即CA,可以给A发证书。而B是相信CA的,因此,B拥有CA的证书。
则,A生成一对公钥,发送给CA进行签署(可以理解为盖章)得到证书,然后返回给自己,并且配置服务器,使之能使用证书。而B收到A的证书后,使用保存在主机上的CA证书去验证。
基本概念:
1、SSL所使用的证书可以自己生成,也可以通过一个商业性CA(如Verisign 或 Thawte)签署证书。
2、证书的概念:首先要有一个根证书,然后用根证书来签发服务器证书和客户证书,一般理解:服务器证书和客户证书是平级关系。在SSL必须安装根证书和服务器证书来认证。 因此:在此环境中,至少必须有三个证书:根证书,服务器证书,客户端证书。
在生成证书之前,一般会有一个私钥,同时用私钥生成证书请求,再利用证书服务器的根证来签发证书。
3、签发证书的问题:我最近找了很多关于openssl的资料,基本上只生成了根证书和私钥及服务器证书请求,并没有真正的实现签证。我这里参考了一些资料,用openssl自带的一个CA.sh来签证书,而不是用MOD_ssl里的sign.sh来签。用openssl语法来生成证书,有很多条件限定,如目录,key的位置等,比较麻烦,我实验了好几天,最后放弃了。有兴趣的可以参考一下openssl 手册。
加密分类:
对称加密
建立在双方互相信任的基础上,密钥只有一种,只有在拥有密钥的前提下才能解密数据。没有密钥,别人无法看到解密后的数据。
非对称加密
先手动生成一对密钥,公钥和私钥,公钥可以被任何人拥有,私钥一般只有自己保存,公钥发布出去,自己用私钥加密后的数据文件被获取了公钥的另一方获取,就可以解密数据文件。一般用于,身份验证,让自己授权的一些人查看自己用私钥机密的数据,或者让对方用自己的公钥加密后的文件自己用私钥可以查看。
单向加密
验证数据的完整性,一般用于数字签名。
对数据单向加密,生成特征码,用来验证数据的完整性。数据发生微笑的变化,就会引发雪崩效应,从而能够确认数据是否完整。
目前的数字签名是建立在公共密钥体制基础上,它是公用密钥加密技术的另一类应用。它的主要方式是,报文的发送方从报文文本中生成一个128位的散列值(或报文摘要)。发送方用自己的私人密钥对这个散列值进行加密来形成发送方的数字签名。然后,这个数字签名将作为报文的附件和报文一起发送给报文的接收方。报文的接收方首先从接收到的原始报文中计算出128位的散列值(或报文摘要),接着再用发送方的公用密钥来对报文附加的数字签名进行解密。如果两个散列值相同、那么接收方就能确认该数字签名是发送方的。通过数字签名能够实现对原始报文的鉴别。
加密机制:
明文加密:telnet ftp pop3 密码不可靠;sendmail NFS NIS 信息数据的不可靠;rsh rcp 验证的不可靠
步骤:
CA产生
cd /etc/pki 公钥基本设置
vim tls/openssl.cnf
图1
创建目录
mkdir certs newcerts cr1
touch index.txe serial
echo “01”>serial 在发起没一份证书时候都要在这个证书上面增加1
产生私钥文件
私钥文件 openssl genrsa 1024 >私钥文件
openssl genrsa 1024>private/cakey.pem
chmod 600 private/* 私钥文件是不被其他人读取的,需要修改权限
请求文件
首先给自己颁发证书,这样别人才会相信你这个机构,方法:
请求文件 openssl req -new -key 私钥文件 -out 请求文件
openssl req -new -key private/cakey.pem-x509 -out cacert.pem
更改默认值
图4
图2
可以利用88,90 s/match/optional来修改,这样其他的地区也可以颁发
图3
ssl服务设置
加载模块能接受443端口
rpm -ivh mod_ssl-2.2.3-31.el5.i386.rpm 产生依赖性
rpm -ivh distcache-1.4.5-14.1.i386.rpm 依赖于这个模块
loadModule ssl_module modules/mod_ssl.so
listen 443
服务器产生私钥
openssl genrsa 1024 > httpd.key
更改权限
Chmod 600 httpd.key
openssl req -new -key httpd.key -out httpd.req 产生请求
图5
产生证书
openssl ca -in httpd.req -out httpd.cert
图6
数据库已经更新
web服务器于证书绑定
vim /etc/httpd/conf.d/ssl.conf
首先指明证书文件存放的位置
sslcertificateFile /etc/httpd/certs/httpd.cert
私钥文件存放的位置
sslcertificateKeyFile /etc/httpd/certs/httpd.ke
启动fttpd
service httpd restart
检查错误,查看端口看是否启动
tail -f /var/log/httpd/error_log 查看apache的错误日志信息
netstat -tupln |grep httpd 查看端口
测试
分别使用http和https 来测试,当使用https来测试的时候系统会提示授权个你证书..
以上就是实现apache安装CA颁发
来源控制及身份验证
/etc/httpd/conf/httpd.conf (主要配置文件)
documentRoot "/var/www/html" <==可以改成你放置站点的主目录
allow Override 允许的覆写参数功能
选项:
all: 全部的权限均可被覆写;
authConfig: 仅有网页认证 (账号密码) 可覆写;
indexes: 仅允许 Indexes 方面的覆写;
limits: 允许使用者利用 Allow, Deny 与 Order 管理可浏览的权限;
none: 不可覆写,亦即让 .htaccess 档案失效
user apache 运行者的身份
group apache
来源控制:
<Directory>
allow Override all
order, Allow, Deny (对网页设置权限):
deny,allow:以 deny 优先处理,但没有写入规则的则默认为 allow
allow,deny:以 allow 为优先处理,但没有写入规则的则默认为 deny.
</Directory>
身份验证:
vim.htaccess 产生说明文件
authuserfile+你需要验证的账号库的地址
authname提示文字
authtype身份验证的类型
require对访问者的要求
htpasswd �Cc 产生账号新文件
directoryIndex index.html index.html.var<==首页『档案的档名』设定
/etc/httpd/conf.d/*.conf (很多的额外参数档,扩展名是 .conf)
你系统升级的时候,你几乎不需要更动原本的配置文件,只要将你自己的额外参数档复制到正确的地点
/usr/lib64/httpd/modules/, /etc/httpd/modules/外挂模块
/var/www/html/ 首页所在目录
/var/www/error/ 服务器设定错误,或者是浏览器端要求的数据错误时,在浏览器上出现错误讯息就以这个目录的默认讯息为主!
/var/www/icons/ 图示文件
/var/www/cgi-bin/CGI (网页程序) 程序放置的目录
/var/log/httpd/Apache 登录档
/usr/sbin/apachectlApache 的主要执行档
/usr/sbin/httpdApache 二进制执行文件
/usr/bin/htpasswdApache 密码保护
至于 MySQL 方面,你需要知道的几个重要目录与档案有
/etc/my.cnf MySQL的配置文件
/var/lib/mysql/MySQL 数据库档案放置
针对服务器环境的设定项目
vim /etc/httpd/conf/httpd.conf
serverTokens OS 客户端我们服务器的版本与操作系统而已
serverRoot "/etc/httpd" 服务器设定的最顶层目录
pidFile run/httpd.pid 放置 PID 的档案
timeout 6060 秒则该次联机就中断
keepAlive On 是否允许持续性的联机
maxKeepAliveRequests 500 该次联机能够传输的最大传输数量
keepAliveTimeout 15则 该次联机在最后一次传输后等待延迟的秒数
startServers=启动 httpd 时,唤醒几个 PID 来处理服务
针对中文 big5 语系编码的设定参数修改
vim /etc/httpd/conf/httpd.conf
# 找到底下这一行,应该是在 747 行左右# AddDefaultCharset UTF-8<请将批注掉!