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

wps_clip_image-24148

【注:

查看安装之后形成了哪些东西:

#rpm -ql openssl |less(分页查看)

加密文件库 libcrypto.so.0.9.8e 实现加密

解密文件库 libssl.so.0.9.8e 实现解密

查看 对称加密、摘要、非对称加密  命令

wps_clip_image-1742

对一个目录做一个摘要:

【摘要做法: 文件 openssl md5/sha 文件名 ;

            信息 echo "信息" |openssl md5/sha 】

#mkdir abc 新建目录

#cp /etc/inittab ./  拷贝文件 至当前目录下

wps_clip_image-19705

#openssl md5 inittab

#openssl sha inittab 文件摘要  164位 

wps_clip_image-1758

用户加密:

#useradd user1 新建用户1

#useradd user2 新建用户2

#echo "123" |passwd --stdin user1

#echo "123" |passwd --stdin user2

#grep user /etc/shadow  【注:加入了salt值,而salt值不同而造成user1和user2的密钥不同】

wps_clip_image-4721

文件加密:

#openssl des3 -in inittab(输入文件) -out f1(输出文件)

然后输入密码123  再次确认密码123

wps_clip_image-26787

文件解密:

#openssl des3 -a -d -in f2 -out inittab

然后输入密码

wps_clip_image-19771

获取私钥:

#openssl genrsa 1024 查询私钥

wps_clip_image-13339

#openssl genrsa 1024 >key.pem  创建私钥文件

#chmod 600 key.pem 修改权限

wps_clip_image-8942

wps_clip_image-1996

公钥获取:【openssl req -new -key 私钥文件 -out 请求文件】

#openssl rsa -in key.pem -pubout -out public.kem

wps_clip_image-12832

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

wps_clip_image-8589

新建目录、文件(三个目录 certs、newcerts、crl  两个文件 index.txt 、serial ):

# mkdir  certs  newcerts  crl

# touch  index.txt   serial

wps_clip_image-23671

为serial 赋予初始值:

#echo "01" >serial  之后递增如:i++

wps_clip_image-21206

创建私钥:

# openssl genrsa 1024 >private/cakey.pem

# ll private/

# chmod 600 private/* 修改权限

wps_clip_image-29267

打开 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(输出目录)

之后自行设置证书 属性内容

wps_clip_image-25666

wps_clip_image-21680

模块 :

查看模块是否安装

# cd  /mnt/cdrom/Server/ 进入光盘查看

# ll  mod_ssl*  查看模块

# rpm  -qa  |grep  mod_ssl  查看是否安装模块

# rpm  -ivh  mod_ssl……(版本)  安装模块 

wps_clip_image-19047

  若出现所依赖的所属关系,则继续设置安装

  # ll  |grep  distcache    查询所依赖的文件(过滤查询)

  # rpm  -ivh  distcache- …  安装所依赖的文件

  # rpm  -ivh  mod_ssl- …  再次安装mod

wps_clip_image-1840

  # 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

wps_clip_image-24118

wps_clip_image-15221

测试是否可以启动

   #service  httpd restart

   #tail -f /var/log/messaes  查看语法

   #tail -f /var/log/httpd/error_log

   #netstat -tupln |grep httpd  端口查看

wps_clip_image-7541

【注:  证书存放入口:第一种方式: 运行 --> 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