自己生成CA证书签发。
参考文章
www.nginx.cn/5804.html
blog.csdn.net/weixin_3588…
检查环境
- openssl环境
> openssl version
OpenSSL 1.0.2k-fips 26 Jan 2017
- nginx环境
> nginx -V
如果出现 configure arguments: –with-http_ssl_module, 则已安装
生成CA证书
在/etc/nginx/
目录下,新建一个专门存放https证书的目录
> mkdir ssl_key
- 创建服务器私钥 生成过程当中需要输入一个生成key的校验密码,后续使用这个文件的时候需要校验密码
> openssl genrsa -idea -out jesonc.key 1024
- 创建签名请求证书CSR文件 通过刚才生成的签名key文件,生成csr文件,生成csr文件的过程当中,也需要输入一个密码和一堆证书签名相关的信息,按照实际情况填写即可,后续的管理、维护和升级的时候也都需要验证此密码
> openssl req -new -key jesonc.key -out jesonc.csr
- 标记证书须使用上述的私钥和签名文件 在生成签名证书的过程中,需要输入和校验在生成key的时候的密码进行校验 -days参数是签名的有效期,默认一个月,建议自己设置签名证书的过期时间,-days 3650等于设置证书有效期10年
> openssl x509 -req -days 3650 -in jesonc.csr -signkey jesonc.key -out jesonc.crt
此时,ssl_key 目录下的文件
> jesonc.crt jesonc.csr jesonc.key
语法配置
文档示例:
server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate www.example.com.crt; # crt文件的位置
ssl_certificate_key www.example.com.key; # key文件的位置
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
...
}
配置示例:
server
{
listen 443 ssl;
server_name domain.com localhost;
ssl_certificate /etc/nginx/ssl_key/jesonc.crt;
ssl_certificate_key /etc/nginx/ssl_key/jesonc.key;
index index.html index.htm;
location / {
root /opt/app/code;
}
}
配置http转发到https
参考文章:cloud.tencent.com/developer/a…
- rewrite方法
server {
listen 80;
server_name domain.com;
rewrite ^(.*) https://$server_name$1 permanent;
}
server {
listen 443 ssl;
server_name domain.com;
ssl on;
ssl_certificate /etc/nginx/ssl/domain.com.crt;
ssl_certificate_key /etc/nginx/ssl/domain.com.crt;
# other
}
- 使用return
server {
listen 80;
server_name domain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name domain.com;
ssl on;
ssl_certificate /etc/nginx/ssl/domain.com.crt;
ssl_certificate_key /etc/nginx/ssl/domain.com.crt;
# other
}
- 使用error_page 只允许HTTP来访问时,用HTTP访问会让Nginx报497错误,然后利用error_page将链接重定向至HTTPS上。
server {
listen 80;
listen 443 ssl;
server_name domain.com;
ssl on;
ssl_certificate /etc/nginx/ssl/domain.com.crt;
ssl_certificate_key /etc/nginx/ssl/domain.com.crt;
# other
error_page 497 https://$server_name$request_uri;
}
使用error_page指令时,将http和https的监听配置写在同一个server块中,对应的其他配置也需要在该server配置块中完成。 需要注意的是,此时需要将error_page指令语句写在最后,否则不能生效。