项目或网站配置https访问CA证书-学习笔记

我们在做一些项目或者网站的时候需要配置https,以加强网站的安全性等,记录一下学习之路~

HTTPS认识

HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。

HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

HTTPS和HTTP的区别主要如下:
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

本文测试环境

服务环境:nginx-1.7

系统环境:windows10/CentOS7

1)  通过openssl自己办法证书测试https服务

2)通过let`s Encrypt申请免费证书

Https项目服务部署(linux-CentOS7)

1)openssl

1. 首先确保机器上安装了openssl和openssl-devel

1)#yum install openssl
2)#yum install openssl-devel

2. 创建服务器私钥,命令会让你输入一个口令:

openssl genrsa -des3 -out server.key 1024  //生成私钥

3. 创建签名请求的证书(CSR):

openssl req -new -key server.key -out server.csr  //生成证书颁发机构,用于颁发公钥

4. 在加载SSL支持的Nginx并使用上述私钥时除去必须的口令:

cp server.key server.key.org
openssl rsa -in server.key.org -out server.key  //除去密码以便reload询问时不需要密码

5. 配置nginx,最后标记证书使用上述私钥和CSR:

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

6. 修改Nginx配置文件,让其包含新标记的证书和私钥:

server {
        listen       9003 ssl;  //监听端口为9003  同时兼容http和https
        server_name  www.aecccloud.com;
  
        #ssl                  on;    //开启ssl  指定https时打开注释
        ssl_certificate      /usr/share/nginx/html/sslfile/server.crt; #证书位置
         ssl_certificate_key  /usr/share/nginx/html/sslfile/server.key; #私钥位置
        ssl_session_timeout  5m;
        ssl_protocols  SSLv2 SSLv3 TLSv1;  //指定密码为openssl支持的格式
        ssl_ciphers  HIGH:!aNULL:!MD5; //密码加密方式
        ssl_prefer_server_ciphers   on;  //依赖SSLv3和TLSv1协议的服务器密码将优先于客户端密码
        location / {
            root   html;  //根目录的相对位置
            index  index.html index.htm;
        }
    }

2)let`s Encrypt

certbot是Let's Encrypt官网推荐的自动化配置工具工具官网可以选择针Apache/Nginx/Haproxy/Plesk等不同服务器不同操作系统的安装配置方法

根据官网https://certbot.eff.org选择服务类型系统版本来执行命令:

certbot有几个不得不解决的依赖问题

1) certbot依赖的python2的urllib3库版本为1.21.1版本,如果已经安装了更高版本的urllib3库,那么降级吧pip install urllib3==1.21.1

2) 如果python2的requests库版本小于2.6.0,那么自觉升级pip install --upgrade --force-reinstall 'requests==2.6.0'

3) 接下来真正的安装过程:​​​​​​

yum install epel-release -y && yum update -y
yum install python2-certbot-nginx -y

4) 确保你的nginx配置已经有配置域名,并且域名解析也已经指向该IP地址,域名能够通过80端口正常访问(或配置其他端口)

5) 当安装完成以后,一切就简单了,运行certbot --nginx,会以提问的方式询问你几个配置问题:

# 第一步会读取你的nginx配置,询问你需要对哪些域名需要添加ssl

Which names would you like to activate HTTPS for?

-------------------------------------------------------------------------------

1: a.haofly.net

2: b.haofly.net

-------------------------------------------------------------------------------

# 第二步询问你在遇到http的时候是否需要重定向到https

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.

就这样,配置就算完成了,可以看到新的nginx配置已经写入到配置文件中,访问域名也会自动跳转到https了

6)当然,Let's Encrypted只有90天的有效期,可以使用这条命令更新证书: sudo certbot renew --dry-run,官方建议每天随机运行两次该命令,如果证书没有过期,运行命令并不会对你的服务器造成什么影响,所以就添加如下定时任务: 

0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew

Https项目服务部署(windows)

1. 安装perl(非必须)

下载地址:https://www.activestate.com/activeperl/downloads

以管理员身份运行cmd或者重启cmd重启电脑,验证是否安装成功

2. 安装openssl

下载地址:http://slproweb.com/products/Win32OpenSSL.html

按照提示更改存放目录,一直next即可,安装完成之后配置一下环境变量。把openssl安装路径bin的路径(例如 D:\OpenSSL-Win64\bin)加入到操作系统的系统环境变量Path中

运行cmd,命令行openssl查看是否安装成功

1)生成证书

首先在nginx安装目录中创建新文件夹sslfile用于存放证书,如:D:\niginx\sslfile

在控制台执行命令:cd D:\nginx\ssl

2) 创建私钥

genrsa -des3 -out test.key 1024 # test文件名是自己随便起即可

输入密码后,再次重复输入确认密码

3) 创建csr证书

openssl req -new -key test.key -out test.csr

#其中key文件为刚才生成的文件

 

执行上述命令后,需要输入一系列的信息。输入的信息中最重要的为Common Name,这里输入的域名即为我们要使用https访问的域名

4) 去除密码

在加载SSL支持的Nginx并使用上述私钥时除去必须的口令,否则会在启动nginx的时候需要输入密码。

复制test.key并重命名为test.copy.key。

在命令行中执行如下命令以去除口令:

openssl rsa -in test.copy.key -out test.key
#然后输入密码,这个密码就是上文中在创建私钥的时候输入的密码。

5) 生成crt证书

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

证书生成完毕。我们发现,ssl文件夹中一共生成了4个文件。下面,配置https服务器的时候,我们需要用到的是其中的test.crt和test.key这两个文件

3. 修改nginx配置 

    listen       9003 ssl;	     #监听端口为9003  且同时支持http和https
    server_name  www.aecccloud.com;    #域名

    ssl_certificate      /usr/share/nginx/html/sslfile/server.crt; #证书位置
    ssl_certificate_key  /usr/share/nginx/html/sslfile/server.key; #私钥位置
    ssl_session_timeout  5m;
    ssl_protocols  SSLv2 SSLv3 TLSv1;  #指定密码为openssl支持的格式
    ssl_ciphers  HIGH:!aNULL:!MD5;   #密码加密方式
    ssl_prefer_server_ciphers   on;  #依赖SSLv3和TLSv1协议的服务器密码将优先

关闭nginx服务,重启服务即可。

发布了13 篇原创文章 · 获赞 1 · 访问量 8233

猜你喜欢

转载自blog.csdn.net/romanticRose/article/details/102501270