Linux Nginx之HTTPS网络安全访问服务

第1章 HTTPS网络安全访问服务

1.1 网络安全涉及的问题

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

传输的数据可能会被第三方随时都能看到

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

传输的数据不能随意让任何人进行修改

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

第一次通讯时,需要确认通讯双方的身份正确

1.1.1 数据机密性问题解决

a) 利用普通加密算法解决机密性

利用相应算法,对传输数据(明文数据)进行加密(密文数据);再利用对应算法,将加密数据解密变为真实数据

优点:实现了数据机密传输,避免了明文传输数据的危险性。

缺点:利用加密算法,将明文改密文,如果第三方获得加密算法,即可将传输密文再次变为明文

b) 利用对称加密算法解决机密性(重要的一种加密方式)

对称加密算法就好比将普通算法的规则手册放入到了保险柜里,只有获取保险柜和保险柜钥匙才能获取《算法手册》

优点:密钥加密算法计算速度非常快;解决了普通加密算法的安全问题

缺点:加解密过程的安全性完全依赖于密钥,并且对称加密密钥是公开的,当通讯加密对象过多时,无法解决密钥管理问题。

1.1.1 数据完整性问题解决

a) 利用单项加密算法(全网备份数据完整性)

根据数据生成特征码(数据指纹信息);接收数据方获取数据信息算出特征码,验证是否与发送过来的特征码一致

若特征码一致,表示数据完整性没被破坏;若特征码不一致,表示数据已被破坏,直接丢弃

****************************************************************************

扩展说明:

01:不同数据的特征码(数据指纹信息)是不可能一致的

单项加密算法特征

· 数据输入一样,特征码信息输出必然相同

· 雪崩效应,输入的微小改变,将造成输出的巨大改变

· 定长输出,无论源数据多大,但结果都是一样的

· 不可逆的,无法根据数据指纹,还原出原来的数据信息。

****************************************************************************

优点:有效的解决了数据完整性问题

缺点:没有考虑中间人×××对数据信息的影响


b) 利用单项加密算法(加密特征码)

利用对称加密算法对数据加密的同时,也对特征码进行加密;

接收方拥有和发送方一样的密钥,才可以解密加密后的数据和特征码

而中间人加密的特征码是没有办法让接收方进行解密的,所以接收方获取不了特征码,直接丢弃数据

****************************************************************************

扩展说明:

01:那么对称密钥如何有效的让通讯双方获取呢

需要进行对称密钥协商过程,即通过密钥交换机制(Internet key exchange IKE)

实现密钥交换机制的协议称为diffie-hellman协议

****************************************************************************

1.1.1 身份验证问题解决

a)利用非对称密钥加密算法(公钥加密算法)

发送方建立私钥和公钥,将公钥发送给接收方,从而实现发送数据方的身份验证

公钥信息在网站访问过程中,被称为证书(×××)

1.1.1 网络安全问题结论

实现网络安全性,需要解决问题的顺序为:

1. 解决身份验证问题

2. 解决数据完整性问题

3. 解决数据机密性问题

1.2 网络安全证书

1.2.1 安全证书的由来

根据上述结论可知,网络安全性最首先要解决的就是身份验证问题;

而解决身份验证问题,最主要的方式就是借助私钥和公钥

而最主要的公钥信息获取就变得尤为重要;利用第三方公正者,公正公钥信息

1.2.2 证书信息所包含的内容

公钥信息,以及证书过期时间

证书的合法拥有人信息

证书该如何被使用(不用关注)

CA颁发机构信息

CA签名的校验码

1.1.1 如何获取网络安全证书

1.1.1 对称加密算法

1.1.1 单向加密算法

1.1.2 非对称加密算法

1.1 OpenSSL软件详细说明

1.1.1 OpenSSL软件介绍

在计算机网络上,OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。这个包广泛被应用在互联网的网页服务器上。

其主要库是以C语言所写成,实现了基本的加密功能,实现了SSL与TLS协议。OpenSSL可以运行在OpenVMS、 Microsoft Windows以及绝大多数类Unix操作系统上(包括Solaris,Linux,Mac OS X与各种版本的开放源代码BSD操作系统)。它也提供了一个移植版本,可以在IBM i(OS/400)上运作。

虽然此软件是开放源代码的,但其许可书条款与GPL有冲突之处,故GPL软件使用OpenSSL时(如Wget)必须对OpenSSL给予例外。

1.1.2 获取OpenSSL软件的版本信息

openssl version <- 查看openssl版本信息

1.1.3 获取OpenSSL配置文件信息

/etc/pki/tls/openssl.cnf <- openssl配置文件,主要用于配置成私有ca时进行使用

说明:基本上openssl配置文件不需要运维过多修改配置

1.1.4 OpenSSL简单使用

#举例说明,加密一个文件

# openssl enc -des3 -salt -a -in inittab -out initab.des3 <- 输入密码后即加密成功

# openssl enc -des3 -d -salt -a -in initab.des3 -out inittab  <- 输入密钥后即解密成功

说明:其中命令中的salt参数,主要用于避免密码加密后,对密钥串的反推

#生成和用户一样的密码串

openssl passwd -1 <- 采用md5加密用户密码串,将明文密码转换为密文

说明:企业中实现修改数据库中用户密码信息,实现用户密码信息重置

#生成伪随机数方法

openssl rand -base64 45 <- 给出一个任意的数字,就会生成任意的随机数

1.1.5 OpenSSL软件建立私有CA(证书颁发机构)

实现HTTPS:

1) 生成私钥(出生证明)和请求证书文件(户口本) --- 运维需要完成

2)根据请求证书文件信息,证书颁发机构生成证书文件(×××) --- 证书颁发机构来完成

3)企业网站利用证书,实现用户安全认证访问 --- 运维需要完成

1.1.6 模拟证书颁发机构颁发程序

01)生成私钥文件信息方法

openssl genrsa 2048 >server.key <- 创建私钥信息,并指定私钥的长度为2048,并将生成

的私钥信息保存在一个文件中

openssl genrsa -out server.key 2048 <- 将私钥信息直接进行保存,加密长度一定要放在输出

文件后面

(umask 077;openssl genrsa -out server1024.key 1024) <- 利用小括号,实现子shell功能,

临时修改umask,使之创建的私钥文件权限为600


02) 生成自签署的证书

[[email protected] ~]# 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.

-----

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 <- 用于查看证书中的信息

1.1.7 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.2 HTTPS实践部署

1.2.1 利用证书实现HTTPS访问Nginx服务

1) 安装opessl软件

# yum install openssl

# yum install openssl-devel


2)进行证书目录规划

# cd /application/nginx/conf/ <- 编译安装Nginx的程序目录

# mkdir key

# cd key/


3) 创建私钥文件

创建服务器私钥,命令会让你输入一个口令: 这里输入的是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;

}

1.2.2 单台web服务器实现http访问自动跳转到https

方法一:利用地址重写功能

server {

listen 80;

server_name www.etiantian.org;

rewrite ^(.*)$ https://$host$1 permanent;

}

说明:在https配置server基础上再添加http跳转server


方法二:利用error_page识别错误码信息进行跳转

server {

listen 443;

listen 80;

server_name www.etiantian.org;

ssl on;

ssl_certificate /application/nginx/conf/key/server.crt;

ssl_certificate_key /application/nginx/conf/key/server.key;

location / {

root html/www;

index index.html index.htm;

}

error_page 497 https://$host$uri;

}

说明:497为内置错误码,当访问http无法处理,需要利用https处理时


方法三:利用返回状态码实现跳转访问

server {

listen 80;

server_name www.etiantian.org;

return 301 https://$host$uri;

}

说明:在https配置server基础上再添加http跳转server

1.2.3 利用反向代理服务器进行http到https跳转

第一个里程碑:修改地址池信息

upstream www_server_pools {

server 10.0.0.7:443;

server 10.0.0.8:443;

server 10.0.0.9:443;

}


第二个里程碑:修改地址池调用信息

server {

listen 443;

server_name www.etiantian.org;

ssl on;

ssl_certificate /application/nginx/conf/key/server.crt;

ssl_certificate_key /application/nginx/conf/key/server.key;

location / {

proxy_pass https://www_server_pools;

}

}


第三个里程碑:定义http到https跳转配置信息

server {

listen 80;

server_name www.etiantian.org;

rewrite ^(.*)$ https://$host$1 permanent;

}

1.2.4 HTTPS配置总结

①. 总结官方文档ssl模块

http://nginx.org/en/docs/http/ngx_http_ssl_module.html

②. 熟悉创建私钥 生成请求证书过程

③. 获取证书颁发机构颁发的证书,进行配置应用

PS:如果企业有条件,尽量使用付费证书。

原文地址:http://blog.51cto.com/zhuzhiwei/2138698

时间: 2024-08-03 00:00:27

Linux Nginx之HTTPS网络安全访问服务的相关文章

【转】Linux下nginx配置https协议访问的方法

一.配置nginx支持https协议访问,需要在编译安装nginx的时候添加相应的模块--with-http_ssl_module 查看nginx编译参数:/usr/local/nginx/sbin/nginx -V 如下所示: configure arguments: --prefix=/usr/local/nginx --with-google_perftools_module --without-http_memcached_module --user=www --group=www --

linux nginx 安装https证书

在安装过程中,我是用Xshell这个工具来远程我的linux服务器进行操作的 1.把https证书上传到在/home/admin/cert目录下,如果没有cert这个文件夹,则需要新建 2.然后进入/etc/nginx/sites-available目录,找到这个目录下的default文件,修改里面的配置(建议先备份一下) 打开default文件: 把listen 443的这两个注释去掉,然后再加:ssl off;  这个有些资料是ssl on; 我测试了后访问http时会出现400的错误. 然

Linux通过端口转发来访问内网服务(端口转发访问阿里云Redis数据库等服务)

# 安装rinetd wget http://www.boutell.com/rinetd/http/rinetd.tar.gz&&tar -xvf rinetd.tar.gz&&cd rinetd sed -i 's/65536/65535/g' rinetd.c (修改端口范围) mkdir /usr/man&&make&&make install 说明:IP的端口是双字节,也就是256*256-1, 256*256对计算机来说就是0,因

nginx配置https及Android客户端访问自签名证书

前一篇随笔通过keytool生成keystore并为tomcat配置https,这篇随笔记录如何给nginx配置https.如果nginx已配置https,则tomcat就不需要再配置https了.通过以下三步生成自签名证书# 生成一个key,你的私钥,openssl会提示你输入一个密码,可以输入,也可以不输,# 输入的话,以后每次使用这个key的时候都要输入密码,安全起见,还是应该有一个密码保护> openssl genrsa -des3 -out selfsign.key 4096 # 使用

certbot在Centos7上配置合法签名证书,实现nginx的https访问

咖菲猫-李常明笔记 公司因之前使用的openssh创建的自签名证书,有一个弊端,就是在某些客户端上不能使用此证书,无法使用https连接,所以,研究了一下certbot 做签名证书! certbot的官网地址: https://certbot.eff.org/ 1.制作证书前的准备: 你需要有一个公网地址,并绑定合法域名 2.开始制作: (1).下载Certbot客户端: wget https://dl.eff.org/certbot-auto (2).下载后,进入下载的目录,添加执行权限 ch

nginx的多域http、https同时访问配置及http重定向https

1.关于ssl 服务证书的申请或生成就略过 2.nginx关于多域名访问服务器(1)配置nginx中conf文件夹下的nginx.conf加入代码(环境是windows 2008 server+upupw_np7.0) include vhosts.conf; (2)conf文件夹下新建vhost.conf, 加入以下内容: server {listen 80;server_name aaa.com www.aaa.com;location / {root C:/UPUPW_NP7.0/htdo

nginx 支持 https 访问的配置——完整配置文件

关于https的介绍网上很多了,就不啰嗦了. 配置支持https的访问需要nginx安装了ssl模块.其次是要准备ssl证书,nginx版的证书包含了crt文件和key文件,这个ssl证书一般是从认证服务提供商那里申请.假定nginx服务已经准备妥当,现在需要增加https访问的支持,只需要修改一下nginx的虚拟主机配置文件就可以了. 先看完整的配置文件内容吧,重要的几个地方有写注释. # your.domain.name.conf # 这一块是监听 80 端口的访问请求,也就是http的访问

CentOS6.5 下在Nginx中添加SSL证书以支持HTTPS协议访问

参考文献: 1. NginxV1.8.0安装与配置 2. CentOS下在Nginx中添加SSL证书以支持HTTPS协议访问 3. nginx配置ssl证书的方法 4.nginx强制使用https访问(http跳转到https) 5.nginx ssl 107 (net::ERR_SSL_PROTOCOL_ERROR) 无法与服务器建立安全连接 解决方法 配置过程如下: 我的nginx是 yum 安装 具体安装过程参考:[转]CENTOS 6.5 配置YUM安装NGINX+服务器负载均衡 一.安

让你的网站走https(linux, nginx)

自己编写 适合像我这样新手(我也是刚快要弄明白) 服务器已经通过阿里云web一键安装包安装完成 环境是linux+nginx 已经申请域名 购买免费CA证书 购买 验证 成功 下载上传证书 下载证书 上传证书 修改证书权限 nginx配置 nginx虚拟机配置 http强制走https 小坑 购买免费CA证书 我们可以在阿里云购买免费的证书 有效期一年 只能一个域名 可以购买多个免费的 购买 购买 进入之后就直接购买就行了 支付成功 验证 购买成功之后可以回到控制台,找到信息补全按钮,进行补全信