Linux下自建CA的实现

CentOS7上搭建lamp环境

要求如下,搭建在同一台虚拟机上,实现下述3个功能:

vhost1: pma.stu13.com, phpMyAdmin, 同时提供https服务

vhost2: wp.stu13.com, wordpress

vhost3: dz.stu13.com, Discuz

Vmware机器情况如下:

    CA服务器:192.168.2.100/24

    httpd服务器:192.168.2.109/24

    Client客户机:192.168.2.1/24

自建ca的过程如下:

CA上:

生成自签证书。

客户端上:

生成证书请求,并将证书请求发给CA服务器。

CA上:

对客户端发来的证书请求签署证书,并将证书文件发回客户端。

下面具体操作下:

一、搭建CA制作证书

# 1.1主机192.168.2.100充当CA服务器,上面执行

cd /etc/pki/CA

(umask 077;openssl genrsa -out private/cakey.pem 2048)    # 生成私钥

openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650   # 生成自签证书

mkdir certs crl newcerts

touch index.txt

echo 01 > serial

# 1.2在httpd服务器上,生成证书请求文件

 (umask 077;openssl genrsa -out httpd.key 2048)# 生成私钥

openssl req -new -key httpd.key -out httpd.csr  # 生成csr证书请求文件

scp httpd.csr root@192.168.2.100:~/# 将sr文件传给CA服务器

# 1.3在CA服务器上,签署证书

openssl ca -in httpd.csr -out httpd.crt -days 3650

scp httpd.crt root@192.168.2.109:~/     # 将证书传到httpd服务器的root家目录,下面要用到它

# 1.3将CA的证书传给Client测试机器

cd /etc/pki/CA

sz cacert.pem

导出保存到桌面上,重命名为ca.crt,将ca.crt导入到本机。

二、安装httpd

# 关闭防火墙,避免外网无法访问httpd服务器

systemctl stop firewalld        # 暂停centos7上的防火墙

systemctl disable firewalld    # 禁止开机启动centos7的防火墙

# 创建三个虚拟主机的目录,及相关网页文件

mkdir -pv /web/{pma,wp,dz}

touch /web/{pma,wp,dz}/index.html

chown -R apache:apache /web/

cd /web/pma/

tar xf /home/tools/phpMyAdmin-4.4.14.1-english.tar.xz

mv phpMyAdmin-4.4.14.1-english/* ./

rm -rf /web/pma/phpMyAdmin-4.4.14.1-english/    # 清理无用的目录和文件

cd /web/wp

tar xf /home/tools/wordpress-4.3.1-zh_CN.tar.gz

mv wordpress/* ./

rm -fr /web/wp/wordpress/   # 清理无用的目录和文件

cd /web/dz

tar xf /home/tools/Discuz_X3.2_SC_UTF8.tar      # linux 不支持rar格式软件,这里用tar格式的替代

mv Discuz_X3.2_SC_UTF8/upload/* ./

rm -rf Discuz_X3.2_SC_UTF8/# 清理无用的目录和文件

chown -R apache:apache /web/*   # 防止解压出的文件的权限问题,最后还要修改下权限

# 安装httpd2.4

编译安装。。。过程待补充。

检查httpd是不是prefork MPM(命令ps aux|grep htttpd查看),需要修改/etc/httpd/conf.modules.d/00-mpm.conf改成prefork,然后重启httpd服务,php就启动了

# 将SSL文件移动到指定目录

cd /etc/httpd/

mkdir ssl

cd ssl/

cp ~/httpd.key  /etc/httpd/ssl/

cp ~/httpd.crt  /etc/httpd/ssl/

# 编辑http的相关配置文件

vi /etc/httpd/conf/httpd.conf:

DocumentRoot注释掉这一行

AddType application/x-httpd-php  .php  增加这一行

在DirectoryIndex index.html 前面加上index.php

/etc/httpd/conf.d/httpd-vhosts.conf写入如下内容:

<VirtualHost *:80>

    ServerName wp.stu13.com

    DocumentRoot "/web/wp/"

    <Directory "/web/wp">

        Options none

        AllowOverride none

        Require all granted

    </Directory>

    ErrorLog  "/var/log/httpd/wp-err.log"

    CustomLog "/var/log/httpd/wp-access.log" combined

</Virtualhost>

<VirtualHost *:80>

    ServerName dz.stu13.com

    DocumentRoot "/web/dz/"

    <Directory "/web/dz">

        Options none

        AllowOverride none

        Require all granted

    </Directory>

    ErrorLog  "/var/log/httpd/dz-err.log"

    CustomLog "/var/log/httpd/dz-access.log" combined

</Virtualhost>

/etc/httpd/conf.d/ssl.conf写入如下内容:

<VirtualHost *:80>

    ServerName pma.stu13.com

    DocumentRoot "/web/pma/"

    <Directory "/web/pma">

        Options none

        AllowOverride none

        Require all granted

    </Directory>

    ErrorLog  "/var/log/httpd/pma-err.log"

    TransferLog "/var/log/httpd/pma_access_log"         # 注意:SSL 用的是TransferLog

SSLCertificateFile /etc/httpd/ssl/httpd.crt

SSLCertificateKeyFile /etc/httpd/ssl/httpd.key

</Virtualhost>

systemctl restart httpd    # 重启httpd服务,使得SSL配置生效

三、安装mysql(这里以Mariadb通用二进制格式包为例)

# 安装mariadb通用二进制格式包

tar xf mariadb-5.5.43-linux-x86_64.tar.gz -C /usr/local/

cd /usr/local/

ln -s mariadb-5.5.43-linux-x86_64/ mysql

cd mysql/

groupadd  mysql

useradd -s /sbin/nologin -M -g mysql mysql

chown -R root:mysql ./*

mkdir /data     # 创建mysql的数据目录

scripts/mysql_install_db --datadir=/data --user=mysql   # 初始化数据库

cp support-files/mysql.server /etc/init.d/mysqld    # 拷贝mysql启动脚本

chkconfig --add mysqld # 注意:sysV风格的在centos7上不太一样,systemd和sysV的互相不能启动对方。

# 配置mysql的配置文件

配置文件查找次序:

    /etc/my.cnf --> /etc/mysql/my.cnf --> --default-extra-file=/PATH/TO/CONF_FILE --> ~/.my.cnf

mkdir /etc/mysql

cp support-files/my-large.cnf /etc/mysql/my.cnf

# 编辑 /etc/mysql/my.cnf ,增加如下几行

datadir = /data

basedir = /usr/local/mysql                                                                             

innodb_file_per_table = on

# skip_name_reslove = on   测试时发现加了这行,导致了mysql无法启动。【/data目录下有相关日志文件】

# 配置环境变量

echo "export PATH=$PATH:/usr/local/mysql/bin" >>/etc/profile

source /etc/profile

# 启动mysql

出现下图说明启动成功

也可以查看下进程或端口信息

ps aux|grep mysqld

ss -lnt|grep 3306

# 测试php与mysql能否通信

<?php

    $link=mysql_connect('127.0.0.1','mysql','');

    if($link)

        echo "success";

    else

        echo "failure';

    mysql_close();

?>

# 设置mysql账户密码

mysqladmin -u root password amdamd  # 修改root@localhost的密码为amdamd

# 删除多余账户

进入mysql控制台界面,执行

> use mysql

> select user,host,password from user; # 列出所有的mysql账户信息

# 下面来删除这些多余的账户

> drop user root@'www';

> drop user root@'127.0.0.1';

> drop user root@'::1';

> drop user ''@'localhost';

> drop user ''@'www';

> select user,host,password from mysql.user;    # 再次查看,只剩下一个账户了

# 建立一个可以远程访问的账户root@%,密码为amdamd。

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'amdamd' WITH GRANT OPTION;

flush privileges;

# 创建数据库

# mysql -uroot -p

> create database wp;

> create database dz;

三、安装php

yum install php -y

# 编写测试文件

test.php内容如下:

<?php

    phpinfo();

?>

通过IE访问测试,出现下图界面说明php安装成功。

# 如果后期测试访问网站出现下面的提示,需要安装mbstring,

yum install php-mbstring -y

再重启httpd服务即可。

五、安装phpMyAdmin、wordpress、Discuz

# phpMyAdmin

解压到指定目录下,

cp config.sample.inc.php config.inc.php

然后编辑config.inc.php,里面要加入一些随机数

取随机数的命令tr -d 'a-zA-Z0-9' < /dev/urandom | head -30 | md5sum

将生成的随机数粘贴到blowfish_secret 那一行后面的''中。

重启httpd服务即可。

# 安装Discuz,过程略过

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券