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,過程略過

