Nginx添加免费SSL
Contents
前提条件: 你的Nginx要有--with-http_ssl_module
(即HTTPS模块)
申请免费HTTPS证书
步骤
提交你的CSR
CSR: CSR是一个证书签名请求,是客户的服务器软件所生成的一串文本字符。客户在注册的过程中首先要在WEB服务器上生成CSR,并把这串字符提供给证书认证中心。CSR包括以下内容:a) 您的组织信息(组织名称、国家等等), b) 您的Web服务器的域名等
生成申请的CSR文件命令: openssl req -new -nodes -keyout server.key -out server.csr
示例:
╭─sky@sky-linux /tmp
╰─➤ openssl req -new -nodes -keyout server.key -out server.csr
Generating a 2048 bit RSA private key
..................................+++
..............................................................+++
writing new private key to '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) [AU]:CN
State or Province Name (full name) [Some-State]:GuangDong
Locality Name (eg, city) []:GuangZhou
Organization Name (eg, company) [Internet Widgits Pty Ltd]:yourcompany
Organizational Unit Name (eg, section) []:R and D
Common Name (e.g. server FQDN or YOUR name) []:emacsist.github.io (注意,这里最好写 xxx.xxx 的域名,不要包括二级子域名)
Email Address []:your@email.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
╭─sky@sky-linux /tmp
说明 | 字段说明 | 示例 |
---|---|---|
Country Name | ISO国家代码(两位字符) | CN |
State or Province Name | 所在省份 | Guangdong |
Locality Name | 所在城市 | Guangzhou |
Organization Name | 公司名称 | 你的公司名 |
Organizational Unit Name | 部门名称 | R and D |
Common Name | 申请证书的域名 | emacsist.github.io |
Email Address | 邮箱地址 | 可以不输入 |
A challenge password | 密码 | 可以不输入 |
执行完毕后,就将server.csr
这个文件的内容,复制到:
ree SSL Certificate 90 days
Step 1: Provide your CSR
这个表单的输入框里.
选择你的服务器类型
2. Select the server software used to generate the CSR:
这里我们选择nginx
,这个看你服务器使用的类型.
选择你的加密算法
3. Select the hash algorithm you would prefer us to use when signing your Certificate:
我们选择SHA-2
,这个看你自己的需求啦.
然后Next
输入其他详细信息
省略…(按要求输入即可,这里个有用户名和密码等信息,用于登录下载证书等)
验证你的网站拥有权
这个步骤,它会发送一个验证码封邮件到你的域名邮箱里(注册域名时的那个邮箱地址),然后获取验证码,再粘贴到验证框里即可。
这样子,证书的申请就完毕了,等待审核结果。通过的话,就继续往下看:
证书配置
如果上面的申请审核通过后,你就可以登录该网站,去下载你的证书文件,下载回来后,解压后会有四个crt文件,然后进行以下操作:
cat www_yourdomain_com.crt COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt > ssl-bundle.crt
然后将这个ssl-bundle.crt
和server.key
复制到你的服务器上,进行nginx配置即可。
注意,因为我这申请的是个人免费的证书,其他类型的证书可能操作上会有所不同,请参考以下资料
配置 Nginx
将以下配置,复制到你的站点配置里即可:
server {
listen 443;
server_name mysite.com;
ssl on;
# 下面两个地址改为你的证书的正确位置
ssl_certificate /etc/ssl/certs/ssl-bundle.crt;
ssl_certificate_key /etc/ssl/private/mysite.key;
#enables all versions of TLS, but not SSLv2 or 3 which are weak and now deprecated.
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#Disables all weak ciphers
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_prefer_server_ciphers on;
}
重启nginx,即可.
存在问题
如果你的站点存在有外站的URL,就会导致HTTPS混合HTTP
的问题。
如果有好的解决方案,也可以留言给我,谢谢。