HTTPS建立流程:
1. CA建立,并颁发给自己根证书。
2. CA将含有自己公钥的根证书颁发给浏览器厂商,浏览器厂商将证书绑定浏览器。
3. 网站服务器产生自己的公私钥,并将含有自己公钥的待签名证书发给CA 。
4. CA核实网站服务器信息,用自己的私钥给网站证书签名。
5. 网站服务器拿到签名的证书,把它配置到 Apache等自己的服务器上。
1. CA建立,并颁发给自己根证书。
2. CA将含有自己公钥的根证书颁发给浏览器厂商,浏览器厂商将证书绑定浏览器。
3. 网站服务器产生自己的公私钥,并将含有自己公钥的待签名证书发给CA 。
4. CA核实网站服务器信息,用自己的私钥给网站证书签名。
5. 网站服务器拿到签名的证书,把它配置到 Apache等自己的服务器上。
6. 客户端浏览网站时,网站服务器将证书发送给客户端,客户端验证CA的签名。核实无误后建立安全连接。
注:
验证:用私钥加密,用公钥解密。
加密:用公钥加密,用私钥解密。
SSL握手过程:1. 由客户端开始,客户端发送 SSL版本,以及加密和压缩算法给服务器。
2.服务器检查是否支持此版本 SSL,并启动客户端期望的加密和压缩算法。
3. 基础配置完毕后,服务器发送包含自己公钥的证书。
4. 客户端验证服务器证书,并核实服务器的身份是正确的。
5. 验证完毕后,客户端发送一个加密的验证”消息“给服务器。
6. 服务器验证是客户端发送的,并且”消息“可以被解密。服务器将解密后的”消息“发送给客 户端。客户端核实后,安全连接。
配置实验环境
安装实验环境
sudo apt-get install apache2
# 注意
# php5, 需要首先安装apache2
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php5.6
sudo apt install mysql-server mysql-client
sudo apt install php5.6-mysql
配置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
配置myzoo
# 1. 复制myzoo到 /var/www/
sudo cp -r myzoo /var/www/
# 2. 配置myzoo中的数据相关的用户名、密码、数据名字等
sudo vim /var/www/myzoo/includes/database.class.php
# 提高参考, 需要更改成你自己的数据库密码<your_pass>
private $db_host = 'localhost';
private $db_user = 'root';
private $db_pass = "<your_pass>";
private $db_dbname = "";
配置apache2
# 创建配置文件
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/myzoo.conf
sudo vim /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
生成SSL证书
# 创建需要的文件
# 下面四句整体复制执行
mkdir -p ./demoCA/{private,newcerts} && \
touch ./demoCA/index.txt && \
touch ./demoCA/serial && \
echo 01 > ./demoCA/serial
# 生成CA根密钥,用于签名
openssl req -x509 -newkey rsa:2048 -keyout ./demoCA/private/cakey.pem -out ./demoCA/cacert.pem -outform PEM -days 3650
# 生成CA证书请求
# 注意CommonName必填, 比如www.myzoo.com
openssl req -days 3650 -newkey rsa:2048 -keyout ./demoCA/private/tempkey.pem -out tempreq.pem
openssl rsa < ./demoCA/private/tempkey.pem > ./demoCA/private/server_key.pem
# 签发证书
openssl ca -in tempreq.pem -out ./demoCA/server_crt.pem
# 配置apache2
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
# 信任证书,请勿使用chrome,证书要求极为严格
## 为了可以通过www.myzoo.com访问本地
## 注意: 下一行的www.myzoo.com需要同 生成CA证书请求 中填写的CommonName相同
sudo sh -c " echo \"127.0.0.1 www.myzoo.com\" >> /etc/hosts"
浏览器中信任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
配置apache2
# 配置default-ssl.conf
sudo vim /etc/apache2/sites-available/default-ssl.conf
# 修改如下内容
DocumentRoot /var/www/myzoo
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key
## 1. 开启SSL模块
sudo a2enmod ssl
## 2. 启用SSL站点
sudo a2ensite default-ssl
# 重启apache服务器
sudo service apache2 restart
浏览器输入https://www.myzoo.com查看结果
这里的www.myzoo.com就是你输入的CommonName。