Linux下自建CA的實現

  • 2019 年 10 月 5 日
  • 筆記

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 [email protected]:~/# 將sr文件傳給CA伺服器

# 1.3在CA伺服器上,簽署證書

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

scp httpd.crt [email protected]:~/     # 將證書傳到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,過程略過

Tags: