HTTPS安全证书访问连接知识讲解
01:网络安全涉及的问题:
①. 网络安全问题-数据机密性问题
传输的数据可能会被第三方随时都能看到
②. 网络安全问题-数据完整性问题
传输的数据不能随意让任何人进行修改
③. 网络安全问题-身份验证问题
第一次通讯时,需要确认通讯双方的身份正确
02:网络安全涉及的问题解决:
①. 网络安全问题-数据机密性问题解决
a) 利用普通加密算法解决机密性
利用相应算法,对传输数据(明文数据)进行加密(密文数据);再利用对应算法,将加密数据解密变为 真实数据
优点:实现了数据机密传输,避免了明文传输数据的危险性。
缺点:利用加密算法,将明文改密文,如果第三方获得加密算法,即可将传输密文再次变为明文
b) 利用对称加密算法解决机密性(重要的一种加密方式)
对称加密算法就好比将普通算法的规则手册放入到了保险柜里,只有获取保险柜和保险柜钥匙才能获 取《算法手册》
优点:密钥加密算法计算速度非常快;解决了普通加密算法的安全问题
缺点:加解密过程的安全性完全依赖于密钥,并且对称加密密钥是公开的,当通讯加密对象过多时, 无法解决密钥管理问题。
②. 网络安全问题-数据完整性问题解决
a) 利用单项加密算法(全网备份数据完整性)
根据数据生成特征码(数据指纹信息);接收数据方获取数据信息算出特征码,验证是否与发送过来的 特征码一致
若特征码一致,表示数据完整性没被破坏;若特征码不一致,表示数据已被破坏,直接丢弃
****************************************************************************
扩展说明:
01:不同数据的特征码(数据指纹信息)是不可能一致的
单项加密算法特征
· 数据输入一样,特征码信息输出必然相同
· 雪崩效应,输入的微小改变,将造成输出的巨大改变
· 定长输出,无论源数据多大,但结果都是一样的
· 不可逆的,无法根据数据指纹,还原出原来的数据信息。
****************************************************************************
优点:有效的解决了数据完整性问题
缺点:没有考虑中间人***对数据信息的影响
b) 利用单项加密算法(加密特征码)
利用对称加密算法对数据加密的同时,也对特征码进行加密;
接收方拥有和发送方一样的密钥,才可以解密加密后的数据和特征码
而中间人加密的特征码是没有办法让接收方进行解密的,所以接收方获取不了特征码,直接丢弃数据
****************************************************************************
扩展说明:
01:那么对称密钥如何有效的让通讯双方获取呢
需要进行对称密钥协商过程,即通过密钥交换机制(Internet key exchange IKE)
实现密钥交换机制的协议称为diffie-hellman协议
****************************************************************************
③. 网络安全问题-身份验证问题解决
a)利用非对称密钥加密算法(公钥加密算法)
发送方建立私钥和公钥,将公钥发送给接收方,从而实现发送数据方的身份验证
问题:用户第一次访问百度时(还没有获取公钥),有可能会是钓鱼网站
例:让你的母亲验证你的爸爸身份信息,你的母亲就称为证书颁发机构
公钥信息在网站访问过程中,被称为证书(×××)
网络安全问题结论:实现网络安全性,需要解决问题的顺序为
解决身份验证问题
解决数据完整性问题
解决数据机密性问题
1.2 网络安全证书知识
03:网络安全证书由来:
根据上述结论可知,网络安全性最首先要解决的就是身份验证问题;
而解决身份验证问题,最主要的方式就是借助私钥和公钥
而最主要的公钥信息获取就变得尤为重要;利用第三方公正者,公正公钥信息
目前标准的证书存储格式是x509,还有其他的证书格式,需要包含的内容为:
证书==比喻为营业执照
? 公钥信息,以及证书过期时间
? 证书的合法拥有人信息
? 证书该如何被使用(不用关注)
? CA颁发机构信息
? CA签名的校验码
1.4 OpenSSL软件详细说明
获取OpenSSL软件的版本信息:
openssl version <- 查看openssl版本信息
获取OpenSSL配置文件信息:
/etc/pki/tls/openssl.cnf <- openssl配置文件,主要用于配置成私有ca时进行使用
说明:基本上openssl配置文件不需要运维过多修改配置
#举例说明,加密一个文件
openssl enc -des3 -salt -a -in inittab -out initab.des3 <- 输入密码后即加密成功
openssl enc -des3 -d -salt -a -in initab.des3 -out inittab <- 输入密钥后即解密成功
说明:其中命令中的salt参数,主要用于避免密码加密后,对密钥串的反推
-enc 表名使用某个算法加密
-des3 表名使用的算法
-a 使用ASCII进行编发
in 指定要加密的文件
out 加密后的文件(cat 查看就是密文了)
-d 解密
#生成和用户一样的密码串
openssl passwd -1 <- 采用md5加密用户密码串,将明文密码转换为密文
说明:企业中实现修改数据库中用户密码信息,实现用户密码信息重置
#生成伪随机数方法
openssl rand -base64 45 <- 给出一个任意的数字,就会生成任意的随机数 (45 表示生成多少位)
md5sum 1.txt
1.5 OpenSSL软件建立私有CA(证书颁发机构)
实现HTTPS:
- 生成私钥(出生证明)和请求证书文件(户口本) --- 运维需要完成
2)根据请求证书文件信息,证书颁发机构生成证书文件(×××) --- 证书颁发机构来完成
3)企业网站利用证书,实现用户安全认证访问 --- 运维需要完成
模拟证书颁发机构颁发程序:
01)生成私钥文件信息方法:
openssl genrsa 2048 >server.key <- 创建私钥信息,并指定私钥的长度为2048,并将生成的私钥信息保存在一个文件中
openssl genrsa -out server.key 2048 <- 将私钥信息直接进行保存,加密长度一定要放在输出文件后面
(umask 077;openssl genrsa -out server1024.key 1024) <- 利用小括号,实现子shell功能,临时修改umask,使之创建的私钥文件权限为600
- 生成自签署的证书
[root@NFS-server-01 ~]# openssl req -new -x509 -key server1024.key -out server.crt -days 365
req <- 用于创建新的证书
new <- 表示创建的是新的证书
x509 <- 表示定义证书的格式为标准格式
key <- 表示调用的私钥文件信息
out <- 表示输出证书文件信息
days <- 表示证书的有效期
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
----- 以下默认参数可在/etc/pki/tls/openssl.cnf修改
Country Name (2 letter code) [XX]:CN <- 定义生成证书的国家
State or Province Name (full name) []:BJ <- 定义生成证书的省份
Locality Name (eg, city) [Default City]:BJ <- 定义生成证书的城市
Organization Name (eg, company) [Default Company Ltd]:oldboy <- 定义生成证书的组织
Organizational Unit Name (eg, section) []:it <- 定义生成证书的职能部门
Common Name (eg, your name or your server's hostname) []:oldboy.com.cn <- 定义主机服务器名称
说明:此输出信息非常重要,客户端在获取证书前,会利用主机名与相应服务器之间建立连接,然后获得证书
Email Address []:
#openssl x509 -text -in server.crt --- 用于查看证书中的信息
# CA自签发证书实际创建过程
cd /etc/pki/CA/private/ <- 进入到私钥保存目录中
(umask 077;openssl genrsa -out ./cakey.pem 2048) <- 创建一个ca私钥文件
cd /etc/pki/CA <- 进入到CA自签发保存目录中
openssl req -new -x509 -key private/cakey.pem -out cacert.pem <- 生成自签发证书
说明:由于配置文件中定义了一些证书信息,所以默认输入即可
1.6 利用证书实现HTTPS访问Nginx服务
- 安装opessl软件
yum install openssl
yum install openssl-devel
2)进行证书目录规划
cd /application/nginx/conf/ <- 编译安装Nginx的程序目录
mkdir key
cd key/
- 创建私钥文件
创建服务器私钥,命令会让你输入一个口令: 这里输入的是oldboy
openssl genrsa -des3 -out server.key 1024
Generating RSA private key, 1024 bit long modulus
......................++++++
...................++++++
e is 65537 (0x10001)
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:
4)创建请求证书
创建签名请求的证书(CSR):
openssl req -new -key server.key -out server.csr
扩展说明:去掉私钥文件口令密码信息
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key <- 生成无口令的私钥
5)配置Nginx服务使之支持证书访问
修改Nginx配置文件,让其包含新标记的证书和私钥:
server {
server_name YOUR_DOMAINNAME_HERE;
listen 443;
ssl on;
ssl_certificate /application/nginx/conf/key/server.crt;
ssl_certificate_key /application/nginx/conf/key/server.key;
}
6)nginx ssl 模块指令总结:
http://nginx.org/en/docs/http/ngx\_http\_ssl\_module.html
1.7 单台web服务器实现http访问自动跳转到https:
方法一:利用地址重写功能rewrite
说明:在https配置server基础上再添加http跳转server
[root@web01 keys]# cat /application/nginx/conf/extra/blog.conf
server {
listen 80; #默认用户访问的是http,80端口,让它跳转为https
server_name blog.etiantian.org;
rewrite ^(.*)$ https://$host$1 permanent;
}
server {
listen 443;
ssl on;
ssl_certificate /server/keys/server.crt;
ssl_certificate_key /server/keys/server1024.key;
server_name blog.etiantian.org;
root html/blog;
index index.php index.html index.htm;
location ~ .*\.(php|php5)?$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
}
方法二:error_page 497 利用状态码跳转到https
说明:497为内置错误码,当访问http无法处理,需要利用https处理时
[root@web01 keys]# vim /application/nginx/conf/extra/blog.conf
server {
listen 443;
listen 80;
ssl on;
ssl_certificate /server/keys/server.crt;
ssl_certificate_key /server/keys/server1024.key;
server_name blog.george.org;
root html/blog;
index index.php index.html index.htm;
location ~ .*\.(php|php5)?$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
error_page 497 https://$host$uri;
}
方法三:利用返回状态码实现跳转访问
说明:在https配置server基础上再添加http跳转server
server {
listen 80;
server_name www.etiantian.org;
return 301 https://$host$uri;
}
1.8 利用反向代理服务器实现访问https自动跳转为https
vim /applicaiton/nginx/conf/nginx.conf
第一个里程碑:修改地址池信息
upstream kai {
server 10.0.0.7:443;
server 10.0.0.8:443;
server 10.0.0.9:443;
}
第二个里程碑:修改地址池调用信息
server {
listen 443;
server_name www.george.com;
ssl on;
ssl_certificate /application/nginx/conf/key/server.crt;
ssl_certificate_key /application/nginx/conf/key/server.key;
location / {
proxy_pass https://kai;
}
}
第三个里程碑:定义http到https跳转配置信息
server {
listen 80;
server_name www.george.com;
rewrite ^(.*)$ https://$host$1 permanent;
}
小伙伴们可以关注我的×××公众号:linux运维菜鸟之旅
关注“中国电信天津网厅”公众号,首次绑定可免费领2G流量,为你的学习提供流量!