nginx 安装ssl证书一条龙服务
------------------------------------------------1. 证书申请 ----------------------------------------------
最近公司突然提出要用https了 原因是对苹果连接的接口只允许https通过了,哎无处不坑爹(仔细想下也是应该的毕竟安全重要)
首先我们要重新编译nginx使其能支持ssl:
这是我编译的nginx的参数:作为参考--prefix=/opt/nginx/ --user=nginx --with-http_ssl_module --with-http_gunzip_module --without-http_rewrite_module --without-http_fastcgi_module --without-http_upstream_ip_hash_module
编译nginx需要安装些赖 如openssl 等 编译报错可百度报错信息,看差些什么东西 (不是我不把依赖写全 ,只是多折腾几下 加深下影响也好嘛)
编译完成后我们的nginx就可以支持https了,修改默认的nginx.conf :
#HTTPS server
#
server {
listen 443 ssl;
server_name master;
ssl on;
ssl_certificate /opt/nginx/conf/server.crt;
ssl_certificate_key /opt/nginx/conf/server.key;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
将原来注释掉的server部分去掉注释 ssl_certificat ,ssl_certificate_key 后面跟上证书的key和crt文件位置
然后./sbin/nginx -t 查看nginx 能否正常启动 (需要输入证书的密码)
然后就到最重要的部分了---申请ssl证书
我们这里申请的是免费的证书:startssl.com/Validate/DomainValidate
申请的免费证书使用时间为3年
进入网站使用邮箱注册,登陆,没次登陆时会有邮箱验证
然后我们就需要填写一些基本信息,我没有填写,登陆后会看到一个控制面板
点击这里选择免费的证书
选择这里点击continue然后输入你买的域名,
后面会whois你的域名信息,会给你绑定域名的邮箱发一封邮件验证,
然后要求你绑定二级域名之类的 按照提示填写就行了
在linux的nginx 目录下新建一个ssl文件夹,cd到ssl
执行如下命令:openssl req -newkey rsa:2048 -keyout yourname.key -out yourname.csr
根据提示输入你的信息 (要记住你填写的信息,地址可以随便填写,密码要记住,之后要用)
执行成功后,会生成一个youname.csr的文件
cat youname.csr 将得到的信息填入
点击完成,
之后你的ssl证书就得到了(可能是马上就有,也可能要等startssl给你发邮件)
默认得到的ssl证书,是个压缩包(包含nginx apache iis的所需要的证书)
然后你只需把证书拷贝的nginx对应的目录就行
启动nginx ,输入你的证书密码 然后通过域名访问你就能看到左上角的https连接了
---------------------------- 2 nginx中使用pfx格式的ssl证书-----------------------------------------------
原文及更多文章请见个人博客:http://heartlifes.com
首先,nginx在编译安装时得安装ssl模块
上传ssl证书到服务器/usr/local/nginx/ssl/xxx.pfx生成证书crt可key
openssl pkcs12 -in /usr/local/nginx/ssl/xxx.pfx -clcerts -nokeys -out /usr/local/nginx/ssl/xxx.crt
openssl pkcs12 -in /usr/local/nginx/ssl/xxx.pfx -nocerts -nodes -out /usr/local/nginx/ssl/xxx.rsa
- 1
- 2
验证证书正确性
openssl s_server -www -accept 443 -cert /usr/local/nginx/ssl/xxx.crt -key /usr/local/nginx/ssl/xxx.rsa
- 1
配置nginx
server {
listen 443;
server_name localhost;
ssl on;
ssl_certificate /usr/local/nginx/ssl/xxx.crt;
ssl_certificate_key /usr/local/nginx/ssl/xxx.rsa;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
location ~ /api/(.*) {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Ssl on;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://serverAPI;
}
}
-------------------------------------------3. nginx配置SSL(https)-----------------------------------
nginx配置ssl很简单,首先需要两个文件,一个是crt文件,另一个是key文件,如下所示:
server.crt; #(证书公钥)
server.key; #(证书私钥)
在windows下的证书一般是pfx文件,这里需要把pfx文件转成crt和key文件,转换方法如下:
第一步:下载OpenSSL软件包
第二步:解压缩到 c:\openssl 目录下,运行cmd.exe进入命令窗口,执行:
cd c:\openssl\bin
set OPENSSL_CONF=openssl.cnf
将*.pfx文件放到bin目录下,执行:
openssl pkcs12 -in myssl.pfx -nodes -out server.pem
openssl rsa -in server.pem -out server.key
openssl x509 -in server.pem -out server.crt
得到server.key,server.crt
然后把这两个文件放到nginx的conf文件夹下
打开nginx配置文件,添加配置段:
- # HTTPS
- server {
- listen 443;
- server_name www.xxx.com; # 项目域名
- ssl on;
- ssl_certificate server.crt; #(证书公钥)
- ssl_certificate_key server.key; #(证书私钥)
- ssl_session_timeout 5m;
- ssl_protocols SSLv2 SSLv3 TLSv1;
- ssl_ciphers HIGH:!aNULL:!MD5;
- ssl_prefer_server_ciphers on;
- location / {
- proxy_pass http://192.168.1.11:8086; # tomcat服务器地址
- }
- }
然后访问https://www.xxx.com 就可以了
如果要实现http强制跳转到https,可以添加下面配置段:
- server {
- listen 80;
- server_name www.xxx.com;
- # 跳转到HTTPS
- return 301 https://$server_name$request_uri;
- }