zoukankan      html  css  js  c++  java
  • Linux三阶段之十二:HTTPS安全证书访问连接实践配置

    十二、HTTPS安全证书访问连接实践配置

    (一)网络安全涉及的问题

    ①. 网络安全问题-数据机密性问题
        传输的数据可能会被第三方随时都能看到		
    ②. 网络安全问题-数据完整性问题
        传输的数据不能随意让任何人进行修改
    ③. 网络安全问题-身份验证问题
        第一次通讯时,需要确认通讯双方的身份正确
    
    

    (二)网络安全涉及的问题

    ①. 网络安全问题-数据机密性问题解决

     a) 利用普通加密算法解决机密性
    利用相应算法,对传输数据(明文数据)进行加密(密文数据);再利用对应算法,将加密数据解密变为真实数据
    优点:实现了数据机密传输,避免了明文传输数据的危险性。
    缺点:利用加密算法,将明文改密文,如果第三方获得加密算法,即可将传输密文再次变为明文
                
    b) 利用对称加密算法解决机密性(重要的一种加密方式)
    对称加密算法就好比将普通算法的规则手册放入到了保险柜里,只有获取保险柜和保险柜钥匙才能获取《算法手册》
    优点:密钥加密算法计算速度非常快;解决了普通加密算法的安全问题
    缺点:加解密过程的安全性完全依赖于密钥,并且对称加密密钥是公开的,当通讯加密对象过多时,无法解决密钥管理问题。
    

    ②. 网络安全问题-数据完整性问题解决

    a) 利用单项加密算法(全网备份数据完整性)
    根据数据生成特征码(数据指纹信息);接收数据方获取数据信息算出特征码,验证是否与发送过来的特征码一致
    若特征码一致,表示数据完整性没被破坏;若特征码不一致,表示数据已被破坏,直接丢弃
    ****************************************************************************
    扩展说明:
    01:不同数据的特征码(数据指纹信息)是不可能一致的
    单项加密算法特征
    · 数据输入一样,特征码信息输出必然相同
    · 雪崩效应,输入的微小改变,将造成输出的巨大改变
    · 定长输出,无论源数据多大,但结果都是一样的
    · 不可逆的,无法根据数据指纹,还原出原来的数据信息。
    ****************************************************************************
    
    优点:有效的解决了数据完整性问题
    缺点:没有考虑中间人攻击对数据信息的影响
    
    b) 利用单项加密算法(加密特征码)
    利用对称加密算法对数据加密的同时,也对特征码进行加密;
    接收方拥有和发送方一样的密钥,才可以解密加密后的数据和特征码
    而中间人加密的特征码是没有办法让接收方进行解密的,所以接收方获取不了特征码,直接丢弃数据
    ****************************************************************************
    扩展说明:
    01:那么对称密钥如何有效的让通讯双方获取呢
    需要进行对称密钥协商过程,即通过密钥交换机制(Internet key exchange IKE)
    实现密钥交换机制的协议称为diffie-hellman协议
    

    ③. 网络安全问题-身份验证问题解决

    a)利用非对称密钥加密算法(公钥加密算法)
    发送方建立私钥和公钥,将公钥发送给接收方,从而实现发送数据方的身份验证
    
    让你的母亲验证你的爸爸身份信息,你的母亲就称为证书颁发机构
    公钥信息在网站访问过程中,被称为证书(身份证)	
    
    网络安全问题结论:实现网络安全性,需要解决问题的顺序为
    1. 解决身份验证问题
    2. 解决数据完整性问题
    3. 解决数据机密性问题	
    

    (三)网络安全证书由来:

    根据上述结论可知,网络安全性最首先要解决的就是身份验证问题;
    而解决身份验证问题,最主要的方式就是借助私钥和公钥
    而最主要的公钥信息获取就变得尤为重要;利用第三方公正者,公正公钥信息
    
    目前标准的证书存储格式是x509,还有其他的证书格式,需要包含的内容为:
    证书==身份证
    ?	公钥信息,以及证书过期时间  
    ?	证书的合法拥有人信息  
    ?	证书该如何被使用(不用关注)   
    ?	CA颁发机构信息 
    ?	CA签名的校验码	
    

    (四) OpenSSL软件详细说明

    获取OpenSSL软件的版本信息:
    rpm -qa openssl
    openssl version						<- 查看openssl版本信息
    
    获取OpenSSL配置文件信息:
    /etc/pki/tls/openssl.cnf		    <- openssl配置文件,主要用于配置成私有ca时进行使用
    说明:基本上openssl配置文件不需要运维过多修改配置
    
    利用openssl软件实现HTTPS访问过程
    实现HTTPS:
    

    第一步:创建出一个私钥文件(出生证明) --- 运维人员需要会

    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 server.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.
    -----
    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 []:
    
    ②. 向证书颁发机构申请证书            --- ca证书版本机构完成
    生成请求证书文件 (户口本)       --- 运维人员完成
    openssl req -new -key httpd.key -out httpd.csr
    获取得到证书文件 (身份证)       --- ca颁发机构完成   
    省略
    

    ​ 第三步:配置网站服务,加载私钥和证书信息

    server {
    server_name YOUR_DOMAINNAME_HERE;
    listen 443;
    ssl on;
    ssl_certificate /usr/local/nginx/conf/server.crt;
    ssl_certificate_key /usr/local/nginx/conf/server.key;
    }
    
    server {
    listen        80;
    server_name  www.etiantian.org;
    rewrite ^(.*)$  https://$host$1 permanent; 
    }
    server {
    listen       443;
    server_name  www.etiantian.org;
    ssl on;
    ssl_certificate /server/key/server.crt;
    ssl_certificate_key /server/key/server.key;
    root   html/www;
    index  index.html index.htm;
    }
    
    

    第四步:利用浏览器访问测试

    ssl模块官方链接:http://nginx.org/en/docs/http/ngx_http_ssl_module.html
    
    
  • 相关阅读:
    ${}和#{}的区别,使用场景
    Mysql 面试高频题:innodb,myisam(待更)
    Python 基础
    Python 基础
    python之input(), raw_input()
    Python之回调魔法
    python之setattr,getattr,hasattr
    python之类私有成员
    python之函数式编程
    python之类定义
  • 原文地址:https://www.cnblogs.com/cuiyongchao007/p/12820491.html
Copyright © 2011-2022 走看看