Nginx+HTTPS(SSL/TLS)

环境

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

rpm -qa | grep openssl
#yum install openssl
#yum install openssl-devel

确认nginx是否安装了SSL模块,如下的命令:

/opt/nginx/sbin/nginx -V

看是否输出--with-http_ssl_module,如果没有需要重新配置并安装下。

创建证书 【自己颁发证书给自己】

#cd /usr/local/nginx/conf
#openssl genrsa -des3 -out server.key 1024
#openssl req -new -key server.key -out server.csr
#openssl rsa -in server.key -out server_nopwd.key
#openssl x509 -req -days 365 -in server.csr -signkey server_nopwd.key -out server.crt
#cd /opt/nginx/conf
#openssl genrsa -des3 -out cert.key 2048  //创建服务器私钥
#openssl req -new -key cert.key -out cert.csr  //签名请求的证书

会给出如下的提示:

Enter pass phraseforcert.key:
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) [Beijing
Locality Name (eg, city) [Default City]:Beijing
Organization Name (eg, company) [Default Company Ltd]:demo
Organizational Unit Name (eg, section) []:localhost
Common Name (eg, your name or your server‘shostname) []:localhost
Email Address []:[email protected]
Please enter the following‘extra‘attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

冒号后面是需要我们填写的,最后两个我都没有填。带空的中括号似乎可以选填。

制作解密后的私钥

先将cert.key文件复制一份为cert.key.org
cp cert.key cert.key.org
#openssl rsa -in cert.key.org -out cert.key
接下来,最后一步,用cert.csr和cert.key生成cert.crt文件
#openssl x509 -req -days 365 -in cert.csr -signkey cert.key -out server.crt

配置nginx

必须在server配置块中打开SSL协议,还需要指定服务器端证书和密钥文件的位置,打开conf/vhosts下面的配置文件:
PHP示例:

server {
    listen 443;
    server_name _;
    access_log off;

    ssl on;
    ssl_certificate /opt/nginx/conf/vhosts/cert.crt;
    ssl_certificate_key /opt/nginx/conf/vhosts/cert.key;
    ssl_session_timeout 10m;
        ssl_session_cache    shared:SSL:10m;
    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers   on;

    location / {
        root /mnt/html/test;
        index index.php index.html;
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /opt/nginx/html;
    }

    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /mnt/html/test$fastcgi_script_name;
        include        fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }
}

SSL操作需要消耗CPU资源,所以在多处理器的系统,需要启动多个工作进程,而且数量需要不少于可用CPU的个数。最消耗CPU资源的SSL操作 是SSL握手,有两种方法可以将每个客户端的握手操作数量降到最低:第一种是保持客户端长连接,在一个SSL连接发送多个请求,第二种是在并发的连接或者 后续的连接中重用SSL会话参数,这样可以避免SSL握手的操作。会话缓存用于保存SSL会话,这些缓存在工作进程间共享,可以使用 ssl_session_cache指令进行配置。1M缓存可以存放大约4000个会话。默认的缓存超时是5分钟,可以使用 ssl_session_timeout加大它。

如果HTTP和HTTPS虚拟主机的功能是一致的,可以配置一个虚拟主机,既处理HTTP请求,又处理HTTPS请求。 配置的方法是删除ssl on的指令,并在*:443端口添加参数ssl:

server {
    listen              80;
    listen              443 ssl;
    server_name         www.example.com;
    ssl_certificate     www.example.com.crt;
    ssl_certificate_key www.example.com.key;
    ...
}

示例:【自己去理解各参数!】

server {

    listen 80;
    listen 443 ssl;
    server_name lvtao.net;
    client_max_body_size 10M;

    ssl_certificate     /etc/nginx/ssl/www.crt;
    ssl_certificate_key /etc/nginx/ssl/private.key;

    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 5m;
    ssl_dhparam /etc/nginx/ssl/dhparam.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";

    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

    add_header Strict-Transport-Security max-age=15768000;
}

Nginx 配置 SSL 重启免密码

Nginx 里面的配置还是老样子,不过有个问题就是重启 Nginx 的时候会要求输入密码,可以有个办法免输密码。敲入如下指令:

openssl rsa -in pupboss.key -out pupboss_unsecure.key

强制 HTTPS

加上如下代码

server {
    listen 80;
    server_name lvtao.net;
    return 301 https://$server_name$request_uri;
}
时间: 2024-07-28 12:36:25

Nginx+HTTPS(SSL/TLS)的相关文章

HTTPS SSL TLS 相关理解

1,在理解 HTTPS SSL TLS 之前先对常用的加密方式进行一个简述: (1),对称加密: 采用一个密钥,对明文进行加密生成密文,相反采用此密钥可对加密后的密文进行解密还原成明文. 代表算法有,DES,3DES,AES 等 (2),非对称加密: 公钥加密,私钥解密. 网上有个比喻很形象(公钥好比一把开着的锁头, 私钥好比这把锁头的钥匙全世界就只有一把钥匙,由你保管, 若要与人通信,将锁头给别人好了.别人拿到这个锁头将重要信息锁在起来.然后全世界就只有你一个人能打开这个锁) 代表算法有,RS

nginx https ssl 设置受信任证书[原创]

1. 安装nginx 支持ssl模块 http://nginx.org/en/docs/configure.html yum -y install openssh openssh-devel (http_ssl_module 模块依赖openssh) ./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid

HTTPS(SSL/TLS) 原理之深入浅出

注:本文参考自网络上的多篇HTTPS相关文章,本人根据自己的理解,进行一些修改,综合. 1. 必要的加密解密基础知识 1)对称加密算法:就是加密和解密使用同一个密钥的加密算法.因为加密方和解密方使用的密钥相同,所以称为称为对称加密,也称为单钥加密方法. 优点是:加密和解密运算速度快,所以对称加密算法通常在消息发送方需要加密大量数据时使用: 缺点是:安全性差,如果一方的密钥遭泄露,那么整个通信就会被破解.另外加密之前双方需要同步密钥; 常用对称加密算法有:DES.3DES.TDEA.Blowfis

在 ASP.NET MVC 中使用 HTTPS (SSL/TLS)

某些安全性较高的网页,如网上支付或用户登陆页面,可能会使用到https(SSL/TLS)来提高安全性.本文介绍了如何在ASP.NET MVC中强制某action使用https和如何进行向https页面的跳转.我们先实现强制一个action使用https.这里写了一个RequireHttpsAttribute,它的作用是将非https连接转换成https连接,这样所有使用了RequireHttps这个filter的controller都会强制使用https连接. 1 using System.We

Https SSL/TLS

SSL 是洋文"Secure Sockets Layer"的缩写,中文叫做"安全套接层". 它是在上世纪90年代中期,由网景公司设计的.(顺便插一句,网景公司不光发明了 SSL,还发明了很多 Web 的基础设施--比如"CSS 样式表"和"JS 脚本") 为啥要发明 SSL 这个协议捏?因为原先互联网上使用的 HTTP 协议是明文的,存在很多缺点--比如传输内容会被偷窥(嗅探)和篡改.发明 SSL 协议,就是为了解决这些问题.

[skill][https][ssl/tls] HTTPS相关知识汇总

结论前置: A 身份验证 证书, 服务器证书 B 密钥协商 RSA   DHE / ECDHE   PSK C 加密通信 加密通信采用对称加密,使用B阶段协商出来的密钥. B 阶段如果使用 RSA 协商,可以用服务器证书在协商过程中解密到 C过程中的密钥.从而解密通信内容.(此方式下,采用旁路方式就可以). B 阶段如果使用DHE/ECDHE协商,至少需要建立链接时的server魔数(也许还需要私钥即服务器证书)才能计算出加密密钥.简单来说协商过程也是一次一密. 于是,应该有两种情况可以解密ht

win10系统iis下部署https (ssl/tls)本地测试环境

有时想要把公司的某些XX项目部署成https站点,是为了在传输层加密传输,防止他人嗅探站点重要数据信息,平常我们使用的http方式都是明文方式传输的很不安全,容易被他人窃取.而有些时候要在本地搭建https环境用来测试,下面看具体在本地搭建https测试站点. 首先要去证书认证机构申请一个证书用来测试,认证机构很多,如              1.http://www.symantec.com/zh/cn/ 2.https://www.geotrust.com/  3.https://cn.g

http/1.x,http/2,https,SSL,TLS

http协议封装的数据包->tcp/ip->服务器  缺点:数据包中途被窃取或者被篡改. http协议封装的数据包->ssl加密->tcp/ip->服务器:缺点:虽然安全,但是开销变大,传输数据变慢. http的连接很简单,是无状态的;https协议是由ssl+http协议构建的可进行加密传输.身份认证的网络协议,比http协议安全. https如何保证数据的传输加密? https在传输的过程中涉及三个密钥: 服务器端用的公钥和私钥,用来进行非对称加密. 客户端产生的随机密钥

SSL/TLS原理详解

本文大部分整理自网络,相关文章请见文后参考. 关于证书授权中心CA以及数字证书等概念,请移步 OpenSSL 与 SSL 数字证书概念贴 ,如果你想快速自建CA然后签发数字证书,请移步 基于OpenSSL自建CA和颁发SSL证书. SSL/TLS作为一种互联网安全加密技术,原理较为复杂,枯燥而无味,我也是试图理解之后重新整理,尽量做到层次清晰.正文开始. 1. SSL/TLS概览 1.1 整体结构 SSL是一个介于HTTP协议与TCP之间的一个可选层,其位置大致如下: SSL:(Secure S