https apache站点安全
部分知识简介:
CA(Certifying Authority)表示证书权威机构,它的职责是证明公钥属于个人、公司或其他的组织。
证书(Cerificate)的基本作用是将一个公钥和安全个体(个人、公司、组织等)的名字绑定在一起。一般情况下,制作证书要经过几个步骤,如上图所示。首先用openssl genrsa生成一个私钥,然后用openssl req生成一个签署请求,最后把请求交给CA,CA签署后就成为该CA认证的证书了。如果在第二步请求时加上-x509参数,那么就直接生成一个self-signed的证书,即自己充当CA认证自己。
【注:RSA私钥能解密用证书公钥加密后的信息。通常以.key为后缀,表示私钥也称作密钥。是需要管理员小心保管,不能泄露的;CSR(Certificate Signing Request)包含了公钥和名字信息。通常以.csr为后缀,是网站向CA发起认证请求的文件,是中间文件;证书通常以.crt为后缀,表示证书文件。】
实验内容:
查看是否安装 openssl
#rpm -qa |grep openssl
【注:
查看安装之后形成了哪些东西:
#rpm -ql openssl |less(分页查看)
加密文件库 libcrypto.so.0.9.8e 实现加密
解密文件库 libssl.so.0.9.8e 实现解密
】
查看 对称加密、摘要、非对称加密 命令
对一个目录做一个摘要:
【摘要做法: 文件 openssl md5/sha 文件名 ;
信息 echo "信息" |openssl md5/sha 】
#mkdir abc 新建目录
#cp /etc/inittab ./ 拷贝文件 至当前目录下
#openssl md5 inittab
#openssl sha inittab 文件摘要 164位
用户加密:
#useradd user1 新建用户1
#useradd user2 新建用户2
#echo "123" |passwd --stdin user1
#echo "123" |passwd --stdin user2
#grep user /etc/shadow 【注:加入了salt值,而salt值不同而造成user1和user2的密钥不同】
文件加密:
#openssl des3 -in inittab(输入文件) -out f1(输出文件)
然后输入密码123 再次确认密码123
文件解密:
#openssl des3 -a -d -in f2 -out inittab
然后输入密码
获取私钥:
#openssl genrsa 1024 查询私钥
#openssl genrsa 1024 >key.pem 创建私钥文件
#chmod 600 key.pem 修改权限
公钥获取:【openssl req -new -key 私钥文件 -out 请求文件】
#openssl rsa -in key.pem -pubout -out public.kem
CA证书签发:
【 注: linux下CA 【openca】 简易的可使用 openssl:
1、编译/etc/pki/tls/openssl.conf 修改如下内容,
第43行的 dir =……目录
第88-90行的 匹配策略match改为optional
修改默认值如下内容
2、在 /etc/pki/CA/ 目录下,创建三个目录,两个文件
# mkdir certs newcerts crl
# touch index.txt serial(证书初始序列号)
3、私钥设置,
# openssl
genrsa 1024 >private/cakey.pem(私钥目录)
……
# ll private/
# chmod 600 private/* 修改权限
自行签发证书,
# openssl req -new -key private/cakey.pem(源目录)
-x509(签发证书格式为x509格式) -out cacert.pem(输出目录)
之后自行设置证书 属性内容
】
【注(自制签名证书):
通过make-ssl-cert创建自签名证书,make-ssl-cert生成证书的方法有两种,一种是根据生成按工具默认的方式生成,一种是按模板文件生成。
#默认的方式生成
注:默认方式生成的公钥(证书)在/etc/ssl/certs/ssl-cert-snakeoil.pem,私钥在/etc/ssl/private/ssl-cert-snakeoil.key。
#按模块生成
注:这里生成的证书采用pem格式,这个pem格式档案中包含了私钥和公钥(证书)两部分内容。在要求输入Common Name(eg, YOUR name)时,输入你的主机名。Common Name必须和httpd.conf中server name必须一致,否则apache不能启动。启动apache时错误提示为:RSA server certificate CommonName (CN) `Koda’ does NOT match server name!? 。
通过openssl命令行创建自签名证书
所生成的证书也采用pem格式,这个pem格式档案中包含了私钥和公钥(证书)两部分内容。如果你将keyout和out分别采用不同的文件名,那keyout和out所对应的文件就会分别存放私钥和公钥(证书)。
】
进入 /etc/pki/CA目录,编译 tls/openssl.cnf
#cd /etc/pki/CA
#vim tls/openssl.cnf 关于[ CA_default ]的内容, dir =../../CA 修改为 /etc/pki/CA
新建目录、文件(三个目录 certs、newcerts、crl 两个文件 index.txt 、serial ):
# mkdir certs newcerts crl
# touch index.txt serial
为serial 赋予初始值:
#echo "01" >serial 之后递增如:i++
创建私钥:
# openssl genrsa 1024 >private/cakey.pem
# ll private/
# chmod 600 private/* 修改权限
打开 tls/openssl.cnf 编译 设置默认,找到 [req_distinguished_name ]编译
countryName_default ="GB" 改为 "CN"(中国)
stateOrProvinceName_default = … 改为 beijing
localityName_default = … 改为 beijing
[ policy_match ]编译 修改
countryName =match修改为 optional
stateOrProvinceName =match修改为 optional
organizationName =match修改为 optional
颁发证书
#openssl req -new -key private/cakey.pem(源目录)
-x509(签发证书格式为x509格式) -out cacert.pem(输出目录)
之后自行设置证书 属性内容
模块 :
查看模块是否安装
# cd /mnt/cdrom/Server/ 进入光盘查看
# ll mod_ssl* 查看模块
# rpm -qa |grep mod_ssl 查看是否安装模块
# rpm -ivh mod_ssl……(版本) 安装模块
若出现所依赖的所属关系,则继续设置安装
# ll |grep distcache 查询所依赖的文件(过滤查询)
# rpm -ivh distcache- … 安装所依赖的文件
# rpm -ivh mod_ssl- … 再次安装mod
# rpm -ql mod_ssl |less (查询安装后的形成的东西)
编译查看 /etc/httpd/conf.d/ssl/conf 脚本中,
LoadModule (为动态加载)ssl_module modules/mod_ssl.so (所加载的模块)
Listen 443 (所提供的端口)
web server
【注:1、创建目录,目录放置私钥文件、请求文件、证书文件;2、捆绑 依赖于 ssl.conf 文件 】
【注:如果SSLCertificateFile中指定的证书已包含相应私钥,SSLCertificateKeyFile这一行就可以注释掉。前面用make-ssl-cert生成的证书就是同时包含公钥和私钥的,所以这里注释掉了。】
如果是第三方签署的CA证书,按如下配置:
SSLEngine on
SSLCertificateFile /etc/httpd/certs/httpd.cert
SSLCertificateKeyFile /etc/httpd/certs/httpd.key
SSLCertificateChainFile /etc/pki/CA/cacert.pem
各指令含义:
SSLEngine :这个指令用于开启或关闭SSL/TLS协议引擎。
SSLCertificateFile:该指令用于指定服务器持有的X.509证书(PEM编码),其中还可以包含对应的RSA或DSA私钥。如果其中包含的私钥已经使用密语加密,那么在Apache启动的时候将会提示输入密语。
SSLCertificateKeyFile:指定了服务器私钥文件(PEM编码)的位置。如果SSLCertificateFile指定的服务器证书文件中不包含相应的私钥,那么就必须使用该指令,否则就不需要使用。
SSLCertificateChainFile:这个指令指定了一个多合一的CA证书,用于明确的创建服务器的证书链。这个证书链将被与服务器证书一起发送给客户端,由直接签发服务器证书的CA证书开始,按证书链顺序回溯,一直到根CA的证书结束,这一系列的CA证书(PEM格式)就构成了服务器的证书链。这有利于避免在执行客户端认证时多个CA证书之间出现混淆或冲突。
1、创建目录,目录放置私钥文件、请求文件、证书文件
顺序:私钥-->公钥 请求文件-->核实 发放证书
私钥文件产生:#openssl genrsa 1024(钥匙长度)>私钥文件名
请求文件产生:#openssl req -new -key 私钥文件 -out 请求文件
证书产生:openssl ca -in 请求文件 -out 证书
命令代码如下:
#mkdir -pv /etc/httpd/certs 新建目录
#cd /etc/httpd/certs 进入目录
#openssl genrsa 1024 >httpd.key 产生私钥
#chmod 600 httpd.key 修改权限
#openssl req -new -key httpd.key -out httpd.req 产生公钥
然后设置证书内容……
#openssl ca -in httpd.req(请求文件)-out httpd.cert(得到的证书) 产生证书
2、捆绑 依赖于 ssl.conf 文件
#vim /etc/httpd/conf.d/ssl.conf
SSLCertificateFile(证书所在位置):-->/etc/httpd/certs/httpd.cert
SSLCertificateKeyFile(私钥位置):-->/etc/httpd/certs/httpd.key
先解开注释 ,SSLCertificateChainFile(签证站):-->/etc/pki/CA/cacert.pem
测试是否可以启动
#service httpd restart
#tail -f /var/log/messaes 查看语法
#tail -f /var/log/httpd/error_log
#netstat -tupln |grep httpd 端口查看
【注: 证书存放入口:第一种方式: 运行 --> mmc ,控制台,添加/删除管理单元 ,
选择控制节点选择管理单元【证书】添加,ok
第二种方式:打开浏览器的【属性】,找到【证书】,设置,ok
】
明文访问: http://192.168.2.100 后输入账号 进入访问
密文访问: https://192.168.2.100 后输入账号 进入访问
若访问出现安全警报,则解决证书问题,证书查看--常规--安装证书--证书向导--区域选择--成功。之后可以进入证书存放入口,查询一下是否添加成功。若还出现错误,根据问题所在自行解决。
关闭明文访问: 进入 /etc/httpd/conf/httpd.conf 编译,
# vim /etc/httpd/conf/httpd.conf 进入后,注释掉【注:大约在第134行】 "Listen 80"
重启服务 # service httpd restart
尝试明文访问、密文访问,会出现什么现象。
若过程中出现错误,请根据问题所在从而解决问题。
本文部分有参考其他文章 ,链接:http://www.linuxidc.com/Linux/2011-11/47479p2.htm