博客 系统 wordpress,seo体系百科,小程序游戏开发平台,云南照明网站建设网络安全背景 网络就是实现不同主机之间的通讯。网络出现之初利用TCP/IP协议簇的相关协议概念#xff0c;已经满足了互连两台主机之间可以进行通讯的目的#xff0c;虽然看似简简单单几句话#xff0c;就描述了网络概念与网络出现的目的#xff0c;但是为了真正实现两台主机…网络安全背景 网络就是实现不同主机之间的通讯。网络出现之初利用TCP/IP协议簇的相关协议概念已经满足了互连两台主机之间可以进行通讯的目的虽然看似简简单单几句话就描述了网络概念与网络出现的目的但是为了真正实现两台主机之间的稳定可靠通讯其实是一件非常困难的事情了如果还要再通讯的基础上保证数据传输的安全性可想而知绝对是难上加难因此网络发明之初并没有太关注TCP/IP互联协议中的安全问题。 对于默认的两台主机而言早期传输数据信息并没有通过加密方式传输数据设备两端传输的数据本身实际是明文的只要能截取到传输的数据包就可以直接看到传输的数据信息所以根本没有安全性可言。
早期利用明文方式传输的协议有FTP、HTTP、SMTP、Telnet等。 数据加密算法
网络安全涉及很多方面而网络数据的安全传输通常会面临以下几方面的威胁 1.数据窃听与机密性 即怎样保证数据不会因为被截获或窃听而暴露。 2.数据篡改与完整性 即怎样保证数据不会被恶意篡改。 3.身份冒充与身份验证 即怎样保证数据交互双方的身份没有被冒充。
针对以上几个问题可以用以下几种数据加密方式来解决每种数据加密方式又有多种不同的算法实现 数据加密方式 描述 主要解决的问题 常用算法 对称加密 指数据加密和解密使用相同的密钥 数据的机密性 DES,AES 非对称加密 也叫公钥加密指数据加密和解密使用不同的密钥-密钥对 身份验证 DSARSA 单向加密 指只能加密数据而不能解密数据 数据的完整性 MD5,SHA系列算法
普通算法 网站此时利用普通常见算法针对密码加密基本保证数据再传输时候不是明文
但是黑客可能会有一个庞大的算法本里面记录了常见的密码和加密后的密文一一对应然后可以利用程序大量计算反解出明文密码撞库是黑客通过收集互联网已泄露的用户和密码信息生成对应的字典表尝试批量登陆其他网站后得到一系列可以登录的用户。 很多用户在不同网站使用的是相同的帐号密码因此黑客可以通过获取用户在A网站的账户从而尝试登录B网址这就可以理解为撞库攻击。 对称加密 对称加密算法如其名就是使用同一个秘钥进行加密和解密。优点是速度较快适合对数据量比较大的数据进行加密。缺点是密钥的保存方式需要保证一旦加密或者解密的哪一方泄漏了密钥都会导致信息的泄漏。常用的对称加密算法有:DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6、AES。 非对称加密 简单理解比喻关系
公钥---锁
私钥---开锁钥匙私钥只能由一方安全保管不能外泄而公钥则可以发给任何请求它的人。非对称加密使用这对密钥中的一个进行加密而解密则需要另一个密钥。
比如你向银行请求公钥银行将公钥发给你你使用公钥对消息加密那么只有私钥的持有人--银行才能对你的消息解密。与对称加密不同的是银行不需要将私钥通过网络发送出去因此安全性大大提高。 常用的非对称假面算法有RSAECCDiffie-HellmanEl GamalDSA数字签名用 虽然非对称加密很安全但是和对称加密比起来它非常的慢所以我们还是要用对称加密来传送消息但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。为了解释这个过程请看下面的例子
1.使用对称加密速度快
2.使用非对称加密的方式针对第一步的秘钥加密传输1 超哥需要在银行的网站做一笔交易他的浏览器首先生成了一个随机数作为对称密钥。2 超哥的浏览器向银行的网站请求公钥(非对称加密的公钥~~)。3 银行将公钥发送给超哥。4 超哥的浏览器使用银行的公钥将自己的对称密钥加密(这里是重点,已经是【对称加密非对称加密】)。5 超哥的浏览器将加密后的对称密钥发送给银行。6 银行使用私钥解密得到超哥浏览器的对称密钥。7 超哥与银行可以使用对称密钥来对沟通的内容进行加密与解密了。 总结 1.对称加密方式加密解密使用同样的密钥速度较快但是密钥需要在网络中传输因此可能被截获不安全2.非对称加密使用一对密钥公钥私钥因此安全性很高但是加密和解密速度很慢3.常用的方式是结合两种加密方式效率与安全性都有又了保障。 如何安全获取公钥 1) A和B端首先生成自己的公钥和私钥的密钥对为了使对方能相信自己的公钥信息将自己的公钥信息告知给第三方发证机构利用第三方机构对自己的公钥进行公证。第三方机构会制作一个数字证书机构 编号 以及发证机构的戳并且第三方机构也要给自己设置一个合法的公钥和私钥并且公钥设置为第三方机构的公钥证书。
2) 发证机关计算出数字证书数据的特征码并用自己的私钥进行加密并将加密的信息附加到特征码后成为数字签名。
3) A和B两端获得公正过的证书信息并通过证书信息传递得到对方的公钥。
4) A和B两端与第三方机构建立连接获得第三方证书通过第三方证书获得第三方公钥利用第三方公钥只要能解密数字签名即可。 Openssl软件
在传输层和应用层之间。ssl层 openssl实践
openssl由三部分组成 1.libcrpto通用加密库 2. libsslTSL/SSL组成库基于会话实现了身份认证数据加密和会话完整性。 3. openssl提供命令行工具例如模拟创建证书。 openssl命令行 # 检查版本
[rootchaogelinux ~]# openssl version
OpenSSL 1.0.2k-fips 26 Jan 2017# 配置文件
[rootchaogelinux ~]# cat /etc/pki/tls/openssl.cnf#获取openssl命令操作
[rootchaogelinux ~]# openssl -?
openssl:Error: -? is an invalid command.# 标准命令
Standard commands
asn1parse ca ciphers cms
crl crl2pkcs7 dgst dh
dhparam dsa dsaparam ec
...# 信息摘要命令单向加密命令
Message Digest commands (see the dgst command for more details)
md2 md4 md5 rmd160
sha sha1# 加密命令
Cipher commands (see the enc command for more details)
aes-128-cbc aes-128-ecb aes-192-cbc aes-192-ecb
aes-256-cbc aes-256-ecb base64 bf
bf-cbc bf-cfb bf-ecb bf-ofb# 测试机器对openssl支持的加密算法进行速度测试检测服务器性能
openssl speed 【openssl加密命令】 语法
openssl enc -加密算法 -in filename -out filename # 对文件加密[rootchaogelinux ~]# cat my.pwd
yu:123
[rootchaogelinux ~]#
[rootchaogelinux ~]#
# 输入密码后加密成功超哥这里是888888
[rootchaogelinux ~]# openssl enc -des3 -salt -a -in my.pwd -out my.pwd.des3
enter des-ede3-cbc encryption password:
Verifying - enter des-ede3-cbc encryption password:#解密文件
[rootchaogelinux ~]# cat my.pwd.des3
U2FsdGVkX19ZDOFtbdZz3QNubxm3DKd
[rootchaogelinux ~]## 输入密码后解密文件
[rootchaogelinux ~]# openssl enc -des3 -d -salt -a -in my.pwd.des3 -out my.pwd.src
enter des-ede3-cbc decryption password:
[rootchaogelinux ~]#
[rootchaogelinux ~]# cat my.pwd.src
yu:123参数解释
enc openssl把众多的对称加密算法统一集成在了enc指令用法是 enc -算法名
-des3 指定算法
-d 指定解密
-e 指定加密
-salt 密码加盐防止密码被破解
-a 基于base64位编码可选参数 【openssl创建私有证书】
1.创建私钥和公钥模拟证书颁发机构生成证书生成一对密钥 # 指定私钥长度1024并且将生成的私钥信息保存在文件里且利用小括号功能修改子shell的umask
[rootchaogelinux ssl_cert]# (umask 077;openssl genrsa -out server1024.key 1024)
Generating RSA private key, 1024 bit long modulus
..........
...................
e is 65537 (0x10001)# 读取私钥文件选择非对称加密算法rsa生成公钥写入到文件中
[rootchaogelinux ssl_cert]# openssl rsa -in server1024.key -pubout -out server1024.key.pub# 检查文件
[rootchaogelinux ssl_cert]# ls
server1024.key server1024.key.pub# 生成自签的证书
[rootchaogelinux ssl_cert]# openssl req -new -x509 -key server1024.key -out server.crt -days 365
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]:chaoge
Organizational Unit Name (eg, section) []:it
Common Name (eg, your name or your servers hostname) []:pythonav.cn Nginx部署https 利用证书实现HTTPS访问Nginx服务需要nginx使用ssl模块配置HTTPS支持默认情况下ssl模块并未被安装如果要使用该模块则需要在编译时指定–with-http_ssl_module参数安装模块依赖于OpenSSL库和一些引用文件这些文件并不在同一个软件包中通常这个文件名类似libssl-dev。 nginx的https协议需要ssl模块的支持我们在编译nginx时使用--with-http_ssl_module参数加入SSL模块。还需要服务器私钥服务器证书如果是公司对外环境这个证书需要购买第三方的权威证书否则用户体验得不到保障
部署https实践 1.创建Nginx需要的证书文件
确保机器安装了openssl和openssl-devel创建证书
yum install openssl openssl-devel -y 2.确保nginx支持了ssl模块查看nginx编译信息即可
nginx -V3.模拟证书颁发机构CA创建证书
进入nginx安装目录便于管理证书
[rootchaogelinux ~]# cd /opt/ngx112/
[rootchaogelinux ngx112]# mkdir key
[rootchaogelinux ngx112]# cd key/# 生成私钥文件利用字shell降低文件权限
[rootchaogelinux key]# (umask 077;openssl genrsa -out server1024.key 1024)
Generating RSA private key, 1024 bit long modulus
.
...
e is 65537 (0x10001)# 自己签发证书crt证书扩展名
[rootchaogelinux key]# openssl req -new -x509 -key server1024.key -out server.crt -days 365
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]:chaoge
Organizational Unit Name (eg, section) []:it
Common Name (eg, your name or your servers hostname) []:pythonav.cn
Email Address []:yc_uuu163.com# 向机构申请证书我们这里生成的是证书请求文件而不是直接生成证书了运维发送该文件给机构请求合法证书
[rootchaogelinux key]# openssl req -new -key server1024.key -out server.csr
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]:chaoge
Organizational Unit Name (eg, section) []:it
Common Name (eg, your name or your servers hostname) []:pythonav.cn
Email Address []:yc_uuu163.com# 针对这个请求文件做一个加密处理告知办法机构可以用这个密码解密了解公司信息也可以直接回车不写密码
Please enter the following extra attributes
to be sent with your certificate request
A challenge password []:# 一般这个证书颁发需要等到一周内的时间因此我们直接使用本地的自己签发的证书即可进行练习4.配置Nginx加载私钥证书
修改nginx.conf添加
include extra/443.conf;# 创建https配置文件
vim 443.conf 写入[rootweb01 extra]# cat 443.confserver {server_name _;listen 443 ssl;ssl_certificate /opt/nginx/key/server.crt;ssl_certificate_key /opt/nginx/key/server1024.key;charset utf-8;location / {root html;index index.html index.htm;
}
}
~# 修改80端口虚拟主机进行请求转发给443
}
server {listen 80;server_name www.chaoge.com;charset utf-8;rewrite ^(.*)$ https://$host$1 permanent;location / {root html;index index.html index.htm;}}
include extra/443.conf;
}# 检测语法重启nginx
[rootweb01 extra]# nginx -t
nginx: the configuration file /opt/nginx-1.16.0//conf/nginx.conf syntax is ok
nginx: configuration file /opt/nginx-1.16.0//conf/nginx.conf test is successful