文章插图
一、构建HTTPS网站1. 获取证书和密钥对1.1.1 自签名证书当浏览器发现证书是自签名的 , 会提示用户是否信任该证书 。一般企业内部应用可以选择自签名证书 。
第1步 生成私钥对和CSRCSR用来请求证书 , 其中包含了服务器的密钥对 , CA机构收到请求后会验证CSR请求的签名 。
openssl req -newkey rsa:1024 -nodes -keyout my_key.pem -out mykey_csr.pem
提示输入中最重要的是输入域名信息:Common Name 。文章插图
第2步 生成自签名证书就是模拟CA机构对盲目签名:
openssl x509 -signkey my_key.pem -in mykey_csr.pem -req -days 365 -out my_cert.pem
生成my_cert.pem即签名后的证书:文章插图
1.1.2 向CA机构申请证书
- 向专门的CA机构申请;
- 向代理机构申请 , 如一些云厂商 。
- 向CA发送CSR;
- CA统一生成证书和密钥对 , 但泄露了自己的私钥 。
1.1.3 使用Let’s Encrypt证书Let’s Encrypt可以申请免费的证书 , 作为一个CA机构得到了很多大公司的支持 , 它定义了ACME协议 , 将管理证书的流程进行了标准化 。
可以使用基于ACME协议的客户端在Let’s Encrypt管理证书 , 官方推荐Certbot客户端 。
# 下载Certbot客户端git clone https://github.com/certbot/certbotcd certbot# 生成证书,-w表示代码根目录 , -d要申请证书的域名 , --webroot表示安装插件 。./certbot-auto certonly --webroot -w /usr/Nginx/web -d www.mydomain.com
运行结束在/etc/letsencrypt/live/www.mydomain.com下生成4个文件 , 最重要的是:- fullchain.pem 完整证书链
- privkey.pem 私钥
另外还有: - cert.pem
- chain.pem
2. 部署证书和密钥对1.2.1 Nginx 下部署
http{#http节点中可以添加多个server节点server{#监听443端口listen 443;#对应的域名 , 把mydomain.com改成自己的域名server_name mydomain.com;ssl on;# 证书路径ssl_certificate /etc/cert/fullchain.pem;# 密钥对路径ssl_certificate_key /etc/cert/privkey.pem;ssl_session_timeout 5m;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;ssl_prefer_server_ciphers on;location / {#文件夹root /usr/local/service/ROOT;#主页文件index index.html;}}server{listen 80;server_name mydomain.com;rewrite ^/(.*)$ https://mydomain.com:443/$1 permanent;}}
1.2.2 Apachevim /etc/apache2/sites-available/default-ssl.conf<VirtualHost _default_:443>DocumentRoot /var/www/htmlServerName www.mydomain.com# 开启SSLSSLEngine onSSLCertificateFile /etc/cert/fullchain.pem;SSLCertificateKeyFile /etc/cert/privkey.pem</VirtualHost>
3. 测试https1.3.1 使用curlcurl "https://www.csdn.net" --verbose | head
文章插图
1.3.2 使用Chrome开发者工具
文章插图
1.3.3 301重定向在迁移老的网站 , 为了让http页面能访问到 , 可以设置301重定向 , 将http转向https 。POST请求不支持301重定向 。
1.3.4 HSTS一种新的Web安全协议HTTP Strict Transport Security(HSTS) , 在server的http的head里加:
Strict-Transport-Security: max-age=31536000; includeSubDomains
在接下来的31536000秒内 , 浏览器向域名和子域名的http请求强制转成https 。当发现自签名证书时 , 浏览器会强上停止访问 , 不会出现让用户选择信任或不信任的弹出窗口 。1.3.5 CSPCSP指的是内容安全策略 , 为了缓解很大一部分潜在的跨站脚本问题 , 浏览器的扩展程序系统引入了内容安全策略(CSP)的一般概念 。CSP主要以白名单机制对网站加载或执行的资源起作用 。
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 详解Java面向对象开发,给你不一样的体验
- 你在开发API时是如何设计签名验证的?
- 味道|曾开发可以舔的电视:日本研究人员推出增强咸味的筷子
- 程序员效率神器:shell命令蜕变,用颜色划出重点
- 十年架构师吐血整合Java开发必备宝典,凭借这份宝典定级腾讯T3-4
- 你如何理解敏捷开发?
- 服务器系统哪家强 Ubuntu Server与CentOS
- 微信小程序开发,多端框架全面测评
- 今日给大家推荐一个java开发神器-EasyCode
- linux服务器内存异常,究竟在哪消耗了2.5G?