nginx ssl_ciphers(NGINX应用场景)
nginx ssl_ciphers
让网站永久拥有HTTPS - 申请免费SSL证书并自动续期 Let’s Encrypt
为什么要用HTTPS 网站没有使用HTTPS的时候,浏览器一般会报不安全,而且在别人访问这个网站的时候,很有可能会被运营商劫持,然后在网站里显示一些莫名其妙的广告。
有HTTPS的时候,通俗地讲所有的数据传输都会被加密,你和网站之间的数据交流也就更加安全。
相关简介Let’s Encrypt 如果要启用HTTPS,我们就需要从证书授权机构处获取一个证书,Let’s Encrypt 就是一个证书授权机构。我们可以从 Let’s Encrypt 获得网站域名的免费的证书。
Certbot Certbot是Let’s Encrypt推出的获取证书的客户端,可以让我们免费快速地获取Let’s Encrypt证书。
便宜SSL 便宜SSL是一家国内的SSL证书提供商,同样也拥有免费证书。而且提供丰富的工具: https://www.pianyissl.com/tools。
获取HTTPS证书 获取SSL证书的过程大体上都一样。既可以图形化,也可以命令行,最后实现的效果都完全一样,大家各取所需。
命令行安装Certbot 进入Certbot的官网,选择你所使用的软件和系统环境,然后就会跳转到对应版本的安装方法,以Ubuntu + Nginx为例。
sudo apt-get updatesudo apt-get install software-properties-commonsudo add-apt-repository ppa:certbot/certbotsudo apt-get updatesudo apt-get install certbot申请证书 安装完成后执行:
certbot certonly --webroot -w /var/www/example -d example.com -d www.example.com 这条命令的意思是为以/var/www/example为根目录的两个域名example.com和www.example.com申请证书。
如果你的网站没有根目录或者是你不知道你的网站根目录在哪里,可以通过下面的语句来实现:
certbot certonly --standalone -d example.com -d www.example.com 使用这个语句时Certbot会自动启用网站的443端口来进行验证,如果你有某些服务占用了443端口,就必须先停止这些服务,然后再用这种方式申请证书。
证书申请完之后,Certbot会告诉你证书所在的目录,一般来说会在/etc/letsencrypt/live/这个目录下。
图形化 进入便宜SSL的官网https://www.pianyissl.com,注册了账号之后,选择那个体验版的免费测试,然后点确认购买。
输入域名并点击生成CSR并提交申请按钮。
点击确定按钮。
接下来会选择验证方式。
这里我选择邮箱验证方式,其它另外两种依照你的个人情况而定,反正就是为了验证域名是不是你的而已。
大约过几分钟,邮箱会收到一封验证邮件,如下图,复制②指向的一串验证码,点击①处的Here链接。
输入验证码,点击Next>按钮。
提示已经输入正确的验证码,点击Close Window。
大约等到10分钟左右,再次登陆 https://www.pianyissl.com,进入个人中心,可以看到已经成功申请SSL证书,点击查看详情。
此时你可以点击箭头所指的证书打包下载,然后免费的SSL证书就可以下载到本地了,下载后可以看到SSL压缩包内的文件。
部署HTTPS证书 找到网站的Nginx配置文件,找到listen 80;,修改为listen 443;在这一行的下面添加以下内容:
ssl on;ssl_certificate XXX/fullchain.pem; 修改为fullchain.pem所在的路径ssl_certificate_key XXX/privkey.pem; 修改为privkey.pem所在的路径ssl_session_timeout 5m;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_prefer_server_ciphers on; 保存退出后,通过nginx -t来检查配置文件是否正确,有错误的话改之即可。配置文件检测正确之后,通过nginx -s reload来重载配置文件。
然后通过访问https://example.com来查看是否配置成功。
如果发现无法访问或者是加载不出来的话检查一下443端口有没有开启!
设置HTTP强制跳转HTTPS 上一步成功之后大家可能会发现通过原来的http://example.com无法访问网页了,因为HTTP默认走的是80端口,我们刚才将其修改为443端口了。在这里我们可以在配置文件的最后一行加入以下代码:
server {listen 80;server_name example.com; 这里修改为网站域名rewrite ^(.*)$ https://$host$1 permanent;}意思是每一个通过80端口访问的请求都会强制跳转到443端口,这样一来访问http://example.com的时候就会自动跳转到https://example.com了。
命令行下设置证书自动续期 有心的小伙伴可能会留意到我们刚才申请的整数的有效期只有90天,不是很长,可是我们可以通过Linux自带的cron来实现自动续期,这样就相当于永久了。
随便找一个目录,新建一个文件,名字随便起,在这里以example为例,在里面写入0 */12 * * * certbot renew --quiet --renew-hook "/etc/init.d/nginx reload",保存。
然后在控制台里执行crontab example一切都OK了。原理是example里存入了一个每天检查更新两次的命令,这个命令会自动续期服务器里存在的来自Certbot的SSL证书。然后把example里存在的命令导入进Certbot的定时程序里。
附:其它环境下的证书部署 https://www.pianyissl.com/support/
Nginx相关命令nginx -t 验证配置是否正确nginx -v 查看Nginx的版本号service nginx start 启动Nginxnginx -s stop 快速停止或关闭Nginxnginx -s quit 正常停止或关闭Nginxnginx -s reload 重新载入配置文件crontab相关命令cat /var/log/cron 查看crontab日志crontab -l 查看crontab列表crontab -e 编辑crontab列表systemctl status crond.service 查看crontab服务状态systemctl restart crond.service 重启crontab参考文档https://lucien.ink/archives/81/https://www.cnblogs.com/zoro-zero/p/6590503.htmlhttp://blog.csdn.net/gsls200808/article/details/53486078https://certbot.eff.org/#ubuntuxenial-otherhttp://nginx.org/en/docs/http/configuring_https_servers.html
https://www.cnblogs.com/zdz8207/p/10729294.html
NGINX应用场景
Nginx是一个流行的Web服务器软件,需要进行配置才能正确使用。以下是简单的Nginx配置步骤:
1. 安装Nginx软件:通过互联网搜索及官网下载最新的Nginx安装包进行安装。2. 设置服务监听端口:编辑Nginx主配置文件,设置监听端口,默认是80端口。3. 配置域名解析:通过配置文件中的server段设置Nginx对应的域名、访问控制等等。4. 配置静态文件目录:配置文件中location段指定静态文件所在目录及相应URL文件目录对应关系,加快文件服务器的访问速度。5. 重启Nginx服务:配置完成后,通过命令行可执行nginx -t测试语法,然后再执行sudo nginx -s reload重启Nginx服务。需要注意的是,Nginx配置的详细操作过程因环境、场景不同而异。如遇困难可以查阅Nginx官方_。
nginx ssl pem
MySQL默认的数据通道是不加密的,在一些安全性要求特别高的场景下,我们需要配置MySQL端口为SSL,使得数据通道加密处理,避免敏感信息泄漏和被篡改。
当然,启用MySQL SSL之后,由于每个数据包都需要加密和解密,这个对MySQL的性能是有不小影响的,读者们在使用的时候,要根据实际情况斟酌。
MySQL客户端登录服务器时候的密码不是明文传输,有加密策略处理。
笔者是在 ubuntu12.04 系统上使用MySQL 5.5版本测试的,其他环境请读者自行匹配。
配置MySQL服务器证书
编辑 /etc/mysql/my.cnf 文件
# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem
把上面三行默认证书配置注释打开,使用自己的证书。笔者就使用上次在搭建自己的CA服务 – OpenSSL CA 实战文章中生成的证书
ssl-ca=/home/yunweipai/user_certs/ca_cert.cer
ssl-cert=/home/yunweipai/user_certs/web.cer
ssl-key=/home/yunweipai/user_certs/web_key_plain.pem
这里需要注意的是,在ubuntu上,配置证书后如果不生效,参考这里解决方法
注意上面配置的 web_key_plain.pem 文件,由于MySQL不支持加密后的私钥,因此我们使用命令
openssl rsa -in web_key.pem -passin pass:Yunweipai@123 -out web_key_plain.pem
将私钥解密。MySQL不支持私钥加密的原因是从安全性角度考虑,因为如果要用户传递一个加密的私钥,那么必须要用户传密码,那么MySQL怎么存储这个密码呢?这就引出了我们在密码存储和传输的安全建议里面提到的一系列问题了。
所以MySQL为了简化实现,就不支持私钥加密。
指定客户端连接方式
MySQL服务端在对客户端授权的时候,可以通过选项指定客户端连接MySQL 服务器的SSL级别,参考MySQL赋权的 REQUIRE值:
ssl_option
SSL: 不认证客户端,客户端不需要提供证书
X509: 客户端必须发送一个有效的X509证书
issuer: 客户端的证书是否是服务器所配置的CA颁发的(在我们场景下是ca_cert.cer颁发的证书)
subject: 认证证书的subject(关于证书的subject在之前的文章有介绍)
cipher: 指定加密算法
这些选项可以叠加使用,如:X509|issuser
客户端连接(SSL方式)
mysql 客户端连接
mysql -u root -pChangeme_123 -P 3306 --ssl-ca=/home/yunweipai/user_certs/ca_cert.cer
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 36
Server version: 5.5.43-0ubuntu0.12.04.1 (Ubuntu)
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> \s
--------------
mysql Ver 14.14 Distrib 5.5.43, for debian-linux-gnu (i686) using readline 6.2
Connection id: 36
Current database:
Current user: root@localhost
SSL: Cipher in use is DHE-RSA-AES256-SHA
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.5.43-0ubuntu0.12.04.1 (Ubuntu)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: latin1
Conn. characterset: latin1
UNIX socket: /var/run/mysqld/mysqld.sock
Uptime: 29 sec
Threads: 1 Questions: 109 Slow queries: 0 Opens: 48 Flush tables: 1 Open tables: 41 Queries per second avg: 3.758
--------------
JDBC连接
在jdbc字符串中增加下面参数
useSSL=true&verifyServerCertificate=false
这么就不需要客户端配置证书了,配置就简单很多。因为mysql本身有账号口令认证,因此不需要证书认证。
nginx ssl proxy
你好,你提出的求助问题是设置了无效的代理错误。 解决方法如下:
1、用右键打开IE浏览器属性后,在点击打开【高级】项后,选择【重置】的修复。
2、或者修改IP地址。
3、启用360系统急救箱修复系统和杀毒。修复完成后,重新启动计算机。试试吧
nginx sslv3
谢邀。最近在写https代理的程序,使用openssl实现ssl连接,有涉及到ssl证书。https的作用有三:1加密传输 2认证 3数据完整性ssl证书的主要是用来做认证和加密。大多数证书基于 X.509 v3 证书标准。下面以一次ssl连接进行说明。比如客户端要认证服务器,服务器怎么证明自己是真实的服务器,而不是钓鱼网站呢?这需要服务器有个证书。证书包含以下信息: 使用者的公钥值。 使用者标识信息(如名称和电子邮件地址)。 证书的有效时间。 颁发者CA标识信息。 颁发者CA的数字签名。你可以在IE中Internet选项》内容》证书 中看看证书长什么样。有效的证书需要由权威机构CA签名,CA会用自己的私钥来生成数字签名。这个权威机构CA客户端是可以完全信任的,客户端浏览器会安装CA的根证书,由CA签名的证书是被CA所信任的,这就构成了信任链,所以客户端可以信任该服务器的证书。 客户端与服务器建立ssl连接时,服务器将自身的证书传输给客户端,客户端在验证证书的时候,先看CA的根证书是否在自己的信任根证书列表中。再用CA的根证书提供的公钥来验证服务器证书中的数字签名,如果公钥可以解开签名,证明该证书确实被CA所信任。再看证书是否过期,访问的网站域名与证书绑定的域名是否一致。这些都通过,说明证书可以信任。
接下来使用服务器证书里面的公钥进行服务器身份的验证。 客户端生成一个随机数给到服务器。 服务器对随机数进行签名,并回传给到客户端。 客户端用服务器证书的公钥对随机数的签名进行验证,若验证通过,则说明对应的服务器确实拥有对应服务器证书的私钥,因此判断服务器的身份正常。否则,则任务服务器身份被伪造。这些都没问题才说明服务器是可信的。
接下来客户端会生成会话密钥,使用服务器公钥加密。服务器用自己的私钥解密后,用会话密钥加密数据进行传输。ssl连接就建立了。nginx ssl配置详解
2、检查的防火墙设置3、安装上传的nginx ssl证书配置指南重新部署一遍。
本网站文章仅供交流学习 ,不作为商用, 版权归属原作者,部分文章推送时未能及时与原作者取得联系,若来源标注错误或侵犯到您的权益烦请告知,我们将立即删除.