作为程序员一定要保持良好的睡眠,才能好编程

Nginx支持Https协议

发布时间:2018-10-29

备注说明:

注意:


listen 443:表示监听443端口,即以https提交的请求,上面的listen 80表示同时也监听以http提交的请求;


ssl on:表示开启SSL协议;


ssl_certificate:指定SSL证书的crt文件路径(如果是阿里云的证书则是pem文件);


ssl_certificate_key:指定SSL证书的key文件路径;


其他ssl开头的可以照搬;


proxy_pass:指定代理的地址,可以是外网地址,也可以是内网地址;


proxy_redirect http:// $scheme://:表示在程序中有redirect跳转时,将采用原有传输协议方式跳转,即如果是以https请求,在跳转后依然是https。



第1步:生成私钥

使用openssl工具生成一个RSA私钥

 openssl genrsa -des3 -out server.key 1024

说明:生成rsa私钥,des3算法,2048位强度,server.key是秘钥文件名。

注意:生成私钥,需要提供一个至少4位的密码。

1024位RSA非对称密钥对已经变得不安全了,所以,美国国家标准技术研究院( NIST )要求停止使用不安全的1024位非对称加密算法。微软已经要求所有受信任的根证书颁发机构必须于2010年12月31日之前升级其不安全的1024位根证书到2048位和停止颁发不安全的1024位用户证书,12 月 31 日之后会把不安全都所有 1024 位根证书从 Windows 受信任的根证书颁发机构列表中删除!

而目前几乎所有自签证书都是1024位,自签根证书也都是1024位,当然都是不安全的。还是那句话:由于部署自签SSL证书而无法获得专业SSL证书提供商的专业指导,根本就不知道1024位已经不安全了。

第2步:生成CSR(证书签名请求)

生成私钥之后,便可以创建csr文件了。

此时可以有两种选择。理想情况下,可以将证书发送给证书颁发机构(CA),CA验证过请求者的身份之后,会出具签名证书(很贵)。

另外,如果只是内部或者测试需求,也可以使用OpenSSL实现自签名,具体操作如下:

 openssl req -new -key server.key -out server.csr -config openssl.cfg

说明:需要依次输入国家,地区,城市,组织,组织单位,Common Name和Email。其中Common Name,可以写自己的名字或者域名,

如果要支持https,Common Name应该与域名保持一致,否则会引起浏览器警告。

 

Country Name (2 letter code) [AU]:CN

State or Province Name (full name) [Some-State]:Beijing

Locality Name (eg, city) []:Beijing

Organization Name (eg, company) [Internet Widgits Pty Ltd]:joyios

Organizational Unit Name (eg, section) []:info technology

Common Name (e.g. server FQDN or YOUR name) []:demo.joyios.com   这一项必须和你的域名一致

Email Address []:liufan@joyios.com

第3步:删除私钥中的密码

在第1步创建私钥的过程中,由于必须要指定一个密码。而这个密码会带来一个副作用,那就是在每次Apache启动Web服务器时,都会要求输入密码,

这显然非常不方便。要删除私钥中的密码,操作如下:

openssl rsa -in server.key -out server.key

第4步:生成自签名证书

如果你不想花钱让CA签名,或者只是测试SSL的具体实现。那么,现在便可以着手生成一个自签名的证书了。

需要注意的是,在使用自签名的临时证书时,浏览器会提示证书的颁发机构是未知的。

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

 

说明:crt上有证书持有人的信息,持有人的公钥,以及签署者的签名等信息。当用户安装了证书之后,便意味着信任了这份证书,同时拥有了其中的公钥。证书上会说明用途,例如服务器认证,客户端认证,或者签署其他证书。当系统收到一份新的证书的时候,证书会说明,是由谁签署的。如果这个签署者确实可以签署其他证书,并且收到证书上的签名和签署者的公钥可以对上的时候,系统就自动信任新的证书。

第5步:安装私钥和证书

将私钥和证书文件复制到Apache的配置目录下即可,在Mac 10.10系统中,复制到/etc/apache2/目录中即可。

 



实现代码:

[root@localhost cert]# openssl req -new -key server.key -out server.csr
Enter pass phrase for server.key: 输入上一次生成server.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]:xiaosong Corp. 随便输入
Organizational Unit Name (eg, section) []: 可以不填
Common Name (eg, your name or your server's hostname) []: 可以不填
Email Address []:574482856@qq.com 输入邮箱

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: 可以不填
An optional company name []: 可以不填

[root@localhost cert]# ls
server.key  server.csr

[root@localhost cert]# cp server.key server.key.org
[root@localhost cert]# openssl rsa -in server.key
server.key      server.key.org  
[root@localhost cert]# openssl rsa -in server.key.org -out server.key
Enter pass phrase for server.key.org:
writing RSA key

[root@localhost cert]# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Signature ok
subject=/C=CN/ST=BeiJing/L=Beijing/O=xiaosong Corp./emailAddress=574482856@qq.com
Getting Private key

[root@localhost cert]# ls
server.crt  server.csr  server.key  server.key.org


[root@localhost cert]# ls
server.crt  server.csr  server.key  server.key.org