web安全实践

操作环境:Mac OS

 

一、搭建简单的HTTP连接 

1、安装apache服务

1) 查看apache是否安装,若未安装,立即安装

apachectl -v

 

2) 修改配置文件

前往/etc/apache2文件夹,打开其中最重要的配置文件httpd.conf

(带d的名字的文件是守护进程的配置文件)

重点关注三个模块,想使用哪个模块去掉启用模块的注释即可。

虚拟主机配置模块 默认开启

ssl启用模块 LoadModule ssl_module libexec/apache2/mod_ssl.so

php启用模块 LoadModule php5_module libexec/apache2/libphp5.so

 

其中,虚拟主机配置信息存放在httpd-vhost.conf中,ssl配置信息存放在httpd-ssl.conf中。开启apache服务必然访问httpd.conf文件,若想访问其他文件,在httpd.conf文件中include其它文件的绝对路径即可,服务启动时所有include的文件都被访问到。

# Virtual hosts

Include /private/etc/apache2/extra/httpd-vhosts.conf

# Secure (SSL/TLS) connections

Include /private/etc/apache2/extra/httpd-ssl.conf

 

ps: 可以随便在httpd.conf或者include的任何文件中写任何配置信息,例如,在httpd-vhosts.conf文件中写ssl配置信息,或者在httpd.conf文件中写所有配置信息而不include任何文件。include文件只是便于我们对目标模块的查找和修改,所以简单约定在httpd-vhosts.conf中写非安全的虚拟主机配置,在httpd-ssl.conf中写安全的虚拟主机配置。

 

3) 配置虚拟主机

打开httpd-vhosts.conf文件,配置n个虚拟主机,下面以一个虚拟主机为例。

Listen 3501         为指定端口号设置监听

<VirtualHost *:3501>     (  端口号,范围内随便取,注意避开其它服务端口号,不然apache无法开启)

DocumentRoot “yourRootDir’s absolute path"

ServerName www.example.com      (  域名,随便取)

ErrorLog "/var/log/apache2/example-error_log"

CustomLog "/var/log/apache2/example-access_log" common

<Directory />

Options FollowSymLinks

AllowOverride None

Order deny,allow

Allow from all     (  ps:记得把deny from all改成allow from all)

</Directory>

</VirtualHost>

 

4) 配置域名到ip的映射

打开/etc/hosts 文件,添加一行

127.0.0.1  www.example.com

 

5) 开启apache服务

sudo apachectl configtest    检查配置文件有没有语法错误,若出错按提示修改即可

sudo apachectl start            开启

sudo apachectl stop            停止

sudo apachectl restart         重启

 ps:我在开启带ssl模块的apache过程中遇到configtest没有问题,但执行sudo start命令时apache总是无法开启。然后我尝试执行下面的命令就行了???反正要多试。

sudo apachectl -k start            开启

sudo apachectl -k stop            停止

sudo apachectl -k restart         重启

 

检查apache是否开启(多种方案,多尝试)

查看http守护进程是否增多   ps -ef|grep httpd

尝试连接你设置的虚拟主机   telnet www.example.com 3501

查看当前正在监听的端口中有没有你设置的端口号     netstat -a -v

 

2、在配置的虚拟主机根目录下创建html文件,在浏览器中输入域名、端口、路径文件后得到。

 例如,创建一个p1.html

3、若是只输入域名和端口号,可能出现提示You don't have permission to access / on this server.

这是因为虚拟主机目录下没有index.html启动页,需要输入请求的具体页面才能正常访问。

 

 

二、自建CA,搭建安全的HTTPS连接

1、自建CA

1) 安装openssl

查看是否安装 openssl version

 

2) 创建初始工作环境

目录准备:cd && mkdir -p myCA/signedcerts && mkdir myCA/private && cd myCA

创建并进入myCA,同时生成两个子目录 signedcerts和private
myCA用于存放CA根证书,证书数据库,以及后续服务器生成的证书,密钥以及请求
signedcerts:保存签名证书的copy
private: 包含CA私钥

 

3) 创建caconfig.cnf文件

echo '01'>serial && touh index.txt,然后创建caconfig.cnf文件。sudo vi ~/myCA/caconfig.cnf 内容如下:

# My sample caconfig.cnf file.

#
# Default configuration to use when one is not provided on the command line.
#
[ ca ]
default_ca = local_ca
#
#
# Default location of directories and files needed to generate certificates.
#
[ local_ca ]
dir = /home/<username>/myCA
certificate = $dir/cacert.pem
database = $dir/index.txt
new_certs_dir = $dir/signedcerts
private_key = $dir/private/cakey.pem
serial = $dir/serial

#
# Default expiration and encryption policies for certificates.
#
default_crl_days = 365
default_days = 1825
default_md = SHA256

policy = local_ca_policy
x509_extensions = local_ca_extensions

#
# Default policy to use when generating server certificates. The following
# fields must be defined in the server certificate.
#
[ local_ca_policy ]
commonName = supplied
stateOrProvinceName = supplied
countryName = supplied
emailAddress = supplied
organizationName = supplied
organizationalUnitName = supplied

#
# x509 extensions to use when generating server certificates.
#
[ local_ca_extensions ]
subjectAltName = DNS:localhost
basicConstraints = CA:false
nsCertType = server

#
# The default root certificate generation policy.
#
[ req ]
default_bits = 2048
default_keyfile = /home/<username>/myCA/private/cakey.pem
default_md = SHA256

prompt = no
distinguished_name = root_ca_distinguished_name
x509_extensions = root_ca_extensions
#
#
# Root Certificate Authority distinguished name. Change these fields to match
# your local environment!
#
[ root_ca_distinguished_name ]
commonName = MyOwn Root Certificate Authority
stateOrProvinceName = Jiangsu
countryName = CN
emailAddress = xxxxxxx@xxx.com
organizationName = xxx
organizationalUnitName = IT Department

[ root_ca_extensions ]
basicConstraints = CA:true

 

4) 生成CA 根证书和密钥。

export OPENSSL_CONF=~/myCA/caconfig.cnf,该命令用于给环境变量OPENSSL_CONF赋值为caconfig.cnf。
然后,生成CA根证书和密钥
openssl req -x509 -newkey rsa:2048 -out cacert.pem -outform PEM -days 1825
该命令需要用户设置密码。不要忘记。
以上步骤生成了CA自签名根证书,和RSA公/私密钥对。证书的格式是PEM,有效期是1825天。
/myCA/cacert.pem: CA根证书
/myCA/private/cakey.pem:CA私钥

 

5) 创建服务器公私钥,并让CA签名,生成服务器证书。

生成服务器配置文件~/myCA/exampleserver.cnf,例子如下:
#
# exampleserver.cnf
#
[ req ]
prompt = no
distinguished_name = server_distinguished_name

[ server_distinguished_name ]
commonName = localhost                 这里的common name必须与你的虚拟主机的域名相同
stateOrProvinceName = Jiangsu
countryName = CN
emailAddress = xxxxx@xxxx.com
organizationName = xxx
organizationalUnitName = SE

配置文件准备好之后,使用如下命令生成服务器证书:

export OPENSSL_CONF =/<absolute path>/myCA/exampleserver.cnf
该命令设置环境变量OPENSSL_CONF,使得openssl更换配置文件。
然后生成证书和密钥:
openssl req -newkey rsa:1024 -keyout tempkey.pem -keyform PEM -out tempreq.pem -outform PEM
同样的,需要输入密码短语。
然后,需要将临时私钥转换为unencrypted key。命令如下:
openssl rsa < tempkey.pem > server_key.pem
需要输入密码短语。
如果希望将key保持为加密状态,直接改名
mv tempkey.pem server_key.pem

现在,需要使用CA key对服务器证书签名:
export OPENSSL_CONF=/<absolute path>/myCA/caconfig.cnf
openssl ca -in tempreq.pem -out server_crt.pem
删除临时证书和密码文件。
rm -f tempkey.pem && rm -f tempreq.pem
现在,自签名的服务器证书和密钥对便产生了:
1. server_crt.pem : 服务器证书文件
2. server_key.pem : 服务器密钥文件

 

2、配置apache

1) 启用ssl模块

打开httpd.conf文件,取消ssl启动模块的注释,include httpd-ssl.conf文件

 

2) 在httpd-ssl.conf文件中配置带ssl的虚拟主机

Listen 8080       监听一个8080端口

<VirtualHost *:8080>

SSLEngine on     开启ssl引擎

SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

SSLCertificateFile /<absolute path>/myCA/server_crt.pem                     服务器公钥的绝对路径

SSLCertificateKeyFile /<absolute path>/myCA/server_key.pem               服务器私钥的绝对路径

ServerName www.example.com         该域名需与服务器公钥的url相同

DocumentRoot “your root dir’s absolute path

<Directory />

Options FollowSymLinks

AllowOverride None

Order deny,allow

Allow from all

</Directory>

</VirtualHost>

 

3) 开启apache服务

 

4) 在浏览器中导入CA根证书

打开FireFox浏览器,依次选择“编辑”----“首选项”----“高级”----“证书”栏----“查看证书”----“证书机构”

点击导入,选择myCA目录下的根证书“cacert.pem”, 导入。

 

5) 在配置的虚拟主机根目录下创建html文件,在浏览器中输入域名、端口、路径文件后得到。

 例如,创建一个p1.html

 

posted @ 2018-12-13 22:40  thePacer  阅读(183)  评论(0编辑  收藏  举报