本文作者:不许人间见白头

ssl原理,生成ssl密钥对,Nginx配置ssl

不许人间见白头 2年前 ( 2018-05-08 ) 52

通信过程大致如下

image.png

浏览器发送一个https的请求给服务器;

服务器要有一套数字证书,可以自己制作(后面的操作就是自己制作的证书),也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出>提示页面,这套证书其实就是一对公钥和私钥;

服务器会把公钥传输给客户端;

客户端(浏览器)收到公钥后,会验证其是否合法有效,无效会有警告提醒,有效则会生成一串随机数,并用收到的公钥加密;

客户端把加密后的随机字符串传输给服务器;

服务器收到加密随机字符串后,先用私钥解密(公钥加密,私钥解密),获取到这一串随机数后,再用这串随机字符串加密传输的数据(该加密为对称加密,所谓对称加密,就是将数据和私钥也就是这个随机字符串>通过某种算法混合在一起,这样除非知道私钥,否则无法获取数据内容);

服务器把加密后的数据传输给客户端;

客户端收到数据后,再用自己的私钥也就是那个随机字符串解密;

生产ssl密钥对

生产ssl密钥,首先得要有openssl组件,如果没有需要安装下#yum install -y openssl安装

 openssl genrsa -des3 -out tmp.key 2048//key文件为私钥

Generating RSA private key, 2048 bit long modulus

...............................................+++

..............................+++

e is 65537 (0x10001)

Enter pass phrase for tmp.key:

Verifying - Enter pass phrase for tmp.key:


openssl rsa -in tmp.key -out ahao.key //转换key,取消密码

Enter pass phrase for tmp.key:

writing RSA key

-in 指定哪个私钥要被转换,-out转换后的

删除带有密码的# rm -f tmp.key 

openssl req -new -key ahao.key -out ahao.csr//生成证书请求文件,需要拿这个文件和私钥一起生产公钥文件

Country Name (2 letter code) [XX]:

State or Province Name (full name) []:

Locality Name (eg, city) [Default City]:

Organization Name (eg, company) [Default Company Ltd]:

Organizational Unit Name (eg, section) []:

Common Name (eg, your name or your server's hostname) []:

Email Address []:

A challenge password []:123456

An optional company name []:

其中 ahao.key为私钥, ahao.csr为公钥


# openssl x509 -req -days 365 -in ahao.csr -signkey ahao.key -out ahao.crt

Signature ok

subject=/C=XX/L=Default City/O=Default Company Ltd

Getting Private key

以上操作视为了最终生成ahao.key和ahao.crt两个文件

Nginx配置ssl

server
{
    listen 443;
    server_name ahao.com;
    index index.html index.php;
    root /data/wwwroot/test.com;
    #开启ssl
    ssl on;
    ssl_certificate ahao.crt;
    ssl_certificate_key ahao.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
}

保存配置文件后,检查下配置是否有问题,,检查后发现如下问题

# /usr/local/nginx/sbin/nginx -t

nginx: [emerg] unknown directive "ssl" in /usr/local/nginx/conf/vhost/ssl.conf:7

nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed  

这说明当前nginx并不支持ssl,因为在先前我们编译nginx的时候并没有而外配置支持ssl参数,要解决只能从新编译下nginx操作如下

# cd /usr/local/src/nginx-1.12.1

# ./configure --prefix=/usr/local/nginx --with-http_ssl_module

./configure --prefix=/xmisp/server/tengine --with-http_ssl_module --with-http_sub_module=shared --with-http_concat_module=shared  --with-http_limit_req_module=shared 

#make && make install 

# /usr/local/nginx/sbin/nginx -t   在验证下

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

# /etc/init.d/nginxd restart 重启服务

image.png

创建下文件存放目录/data/wwwroot/test.com

写入一下内容# echo "这个是https加密网站" >>/data/wwwroot/test.com/1.html

 编辑hosts,增加192.168.5.16 ahao.com

如下图

image.png

会提示不安全,这个是因为证书是我们自己制作的,并没有得到浏览器认可,如果想继续放访问,可以点添加例外,,此时浏览器地址栏会出现一个灰色的小锁,并且带有黄色三角号,这意味着改链接不安全,,不是不安全而是该证书不被浏览器认可,如下,我自己在阿里云申请的免费证书就可以认可,如下图

image.png

认可的证书是变成一个绿色锁的

文章版权及转载声明

作者:不许人间见白头本文地址:https://www.ahaoyw.com/article/100.html发布于 2年前 ( 2018-05-08 )
文章转载或复制请以超链接形式并注明出处阿豪运维笔记

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

阅读
分享