0、序
基于ubuntn 16.04+apach2+php5.6+mysql14.14 环境搭建web站点,以及HTTPS。同时整合实验过程中,遇到的一些问题。
原稿基于:大佬的博客,同时结合郭燕老师的《自建HTTPS.pdf》。
1、安装实验环境
1.1、安装apache2
sudo apt-get install apache2
遇到问题,通过终端安装程序sudo apt-get install xxx时出错:
E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it
出现这个问题可能是有另外一个程序正在运行,导致资源被锁不可用。而导致资源被锁的原因可能是上次运行安装或更新时没有正常完成,进而出现此状况,解决的办法其实很简单:
在终端中敲入以下两句
方法一:
执行一下 sudo dpkg –configure –a(利用底层的dpkg包管理工具修复一些包安装错误。)
方法二:
//sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock
方法三:
1、ps-aux 查出apt-get进程的PID,
2、用sudo kill PID代码 杀死进程(我都是找出带apt字样的进程格杀勿论)
1.2、安装php5.6
# 注意 ubuntu 16.04默认安装的是php7.0,实验要求改为5.6
# 此外php5.6, 需要首先安装apache2
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php5.6
如果实验过程中发现如下问题,应该是PHP版本不对,没有成功解析myzoo/index.php,也就是没有成功安装php5.6。可以通过php -v检查php版本。
# 检查php版本
php -v
遇到问题,安装php5.6失败;
解决方法:换源
由于Ubuntu Server 16.04官方提供PHP为7.0版本,而不提供PHP5相关版本源的安装,那如何安装PHP5呢,安装好Ubuntu 16.04后请根据以下步骤
# 1.添加网易源
??sudo add-apt-repository 'deb http://mirrors.163.com/ubuntu/ xenial main restricted universe multiverse'# 2.更新源并安装
sudo apt-get update?# 3.安装PHP5.6.11,执行以下命令
sudo apt-get install php5.6
1.3、安装mysql5.6
# 注意安装过程中会弹出GUI界面,手动输入root密码,两次
sudo apt install mysql-server mysql-client
sudo apt install php5.6-mysql
2、配置实验环境
2.1、配置mysql
首先进入mysql交互式命令行
# 使用root账户
mysql -u root -p
# 输入密码
# 创建数据库内容
create database myzoo;
use myzoo; create table Person(PersonID int primary key auto_increment, Password varchar(100),Salt varchar(100),Username varchar(100),Token varchar(100),Zoobars int default 10, Profile varchar(5000));
# 退出数据库
exit
2.2、配置myzoo
# 1. 复制myzoo到 /var/www/
sudo cp -r myzoo /var/www/
# 2. 配置myzoo中的数据相关的用户名、密码、数据名字等
sudo gedit /var/www/myzoo/includes/database.class.php
# 提高参考, 需要更改成你自己的数据库密码<your_pass>
private $db_host = 'localhost';
private $db_user = 'root';
private $db_pass = "123456";
private $db_dbname = "myzoo";
2.3、配置apache2
# 创建配置文件
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/myzoo.conf
sudo gedit /etc/apache2/sites-available/myzoo.conf
# 修改DocumentRoot为 /var/www/myzoo
# 首先禁用默认的Apache虚拟主机:
sudo a2dissite 000-default.conf
# 启用这个站点
sudo a2ensite myzoo.conf
# 重启apache服务器
sudo service apache2 restart到此浏览器中输入localhost应该可以访问myzoo
3、自建HTTPS
3.1、demoCA 中配置参数文件
# 生成SSL证书
# 创建需要的文件
# 下面四句整体复制执行
# 参数p代表parents,表示递归创建目录。
# 递归创建demoCA,同时生成两个子目录 newcerts 和 private
# demoCA 用于存放 CA 根证书,证书数据库,以及后续服务器生成的证书,密钥以及请求
# newcerts:保存签名证书的 copy
# private: 包含私钥
mkdir -p ./demoCA/{
private,newcerts} && \
touch ./demoCA/index.txt && \
touch ./demoCA/serial && \
echo 01 > ./demoCA/serial
3.2、生成 CA 根证书和密钥
# 生成 CA 根证书和密钥,用于签名
# 该命令需要用户设置密码。不要忘记。
# 以上步骤生成了 CA 自签名根证书,和 RSA 公/私密钥对。证书的格式是 PEM,有效期是3650天。
# ./demoCA/cacert.pem: CA 根证书
# ./demoCA/private/cakey.pem:CA 私钥
openssl req -x509 -newkey rsa:2048 -keyout ./demoCA/private/cakey.pem -out ./demoCA/cacert.pem -outform PEM -days 3650
3.3、创建服务器公私钥,并让 CA 签名,生成服务器证书
# 生成CA证书请求
# 注意CommonName必填, 比如www.myzoo.com
# 同样的,需要输入密码短语。
openssl req -days 3650 -newkey rsa:2048 -keyout ./demoCA/private/tempkey.pem -out tempreq.pem# 需要将临时私钥转换为 unencrypted key
# 同样的,需要输入密码短语
openssl rsa < ./demoCA/private/tempkey.pem > ./demoCA/private/server_key.pem
# 使用 CA key 对服务器证书签名
openssl ca -in tempreq.pem -out ./demoCA/server_crt.pem
现在,自签名的服务器证书和密钥对便产生了:
1. server_crt.pem : 服务器证书文件
2. server_key.pem : 服务器密钥文件
3.4、配置apache2
# 配置apache2/ssl
sudo mkdir /etc/apache2/ssl
sudo cp ./demoCA/server_crt.pem /etc/apache2/ssl/server.crt
sudo cp ./demoCA/private/server_key.pem /etc/apache2/ssl/server.key# 配置myzoo-ssl.conf
sudo cp /etc/apache2/sites-available/default-ssl.conf myzoo-ssl.conf# 修改如下内容
# 编辑 DocumentRoot 指向你写的网页文件,要填写绝对路径,/var/www/myzoo。
# 将“SSLCertificateFile ”一项改为”sever_crt.pem” 的绝对路径(从根目录开始) 。
# 将”SSLCertificateKeyFile ”一项改为“server_key.pem”的绝对路径。
# 这样服务器便把之前 CA 签名的“服务器证书文件”和“服务器密钥文件”配置好了。
DocumentRoot /var/www/myzoo
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key
3.5、导入根证书
# 信任证书,请勿使用chrome,证书要求极为严格
## 为了可以通过www.myzoo.com访问本地
## 注意: 下一行的www.myzoo.com需要同 生成CA证书请求 中填写的CommonName相同
sudo sh -c " echo \"127.0.0.1 www.myzoo.com\" >> /etc/hosts"
# CA 与浏览器开发者联系,将自己根证书绑定浏览器。浏览器中信任cacert.pem, 此文件在demoCA文件夹下。
# 以firefox57为例
# 首选项 -> 隐私与安全(也就是左边的小锁) -> 查看证书 -> 证书机构 -> 导入 -> 文件管理器选择demoCA文件夹下的cacert.pem即可,出现一个弹窗, 有三个勾选框, 第一个必选## 生成pfx密钥串,此命令目前无需执行
# openssl pkcs12 -export -inkey ./demoCA/private/server_key.pem -in ./demoCA/server_crt.pem -out server.pfx
# 1. 开启SSL模块
sudo a2enmod ssl
# 2. 禁用default-SSL站点
sudo a2dissite default-ssl
# 3. 启用SSL站点
sudo a2ensite myzoo-ssl
# 4. 重启apache服务器
sudo service apache2 restart
3.6、打开浏览器,验证
浏览器输入https://www.myzoo.com查看结果
注意:
- 上面的www.myzoo.com需要修改成你输入的CommonName。 如果
- 出现安全警告,可以把这些网站加入”例外”。