本文目录:
- 1、如何在Nginx服务器上安装SSL证书?
- 2、NGINX 配置 SSL 双向认证
- 3、如何在nginx服务器部署ssl证书
- 4、nginx配置ssl使用https(解决前端跨域问题)
如何在Nginx服务器上安装SSL证书?
您好!
安装SSL证书主要将SSL证书配置到服务器环境。安装教程:网页链接
目前全球服务器环境主要分为4个类型:Apache、IIS、Nginx、Tomcat
NGINX 配置 SSL 双向认证
对于 NGINX 的 HTTPS 配置,通常情况下我们只需要实现服务端认证就行,因为浏览器内置了一些受信任的证书颁发机构(CA),服务器端只需要拿到这些机构颁发的证书并配置好,浏览器会自己校验证书的可用性并通过 SSL 进行通讯加密。
但特殊情况下我们也需要对客户端进行验证,只有受信任的客户端才能使用服务接口,此时我们就需要启用双向认证来达到这个目的,只有 当客户端请求带了可用的证书才能调通服务端接口 。
CA 与自签名
CA 是权威机构才能做的,并且如果该机构达不到安全标准就会被浏览器厂商“封杀”,前不久的沃通、StartSSL 就被 Mozilla、Chrome 封杀了。不过这并不影响我们进行双向认证配置,因为我们是自建 CA 的..
为了方便,我们就在 NGINX 的目录下进行证书相关制作:
cd /etc/nginx
mkdir ssl
cd ssl
制作 CA 私钥
openssl genrsa -out ca.key 2048
制作 CA 根证书(公钥)
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
注意:
Common Name 可以随意填写
其他需要填写的信息为了避免有误,都填写 . 吧
服务器端证书
制作服务端私钥
openssl genrsa -out server.pem 1024
openssl rsa -in server.pem -out server.key
生成签发请求
openssl req -new -key server.pem -out server.csr
注意:
Common Name 得填写为访问服务时的域名,这里我们用 usb.dev 下面 NGINX 配置会用到
其他需要填写的信息为了避免有误,都填写 . 吧(为了和 CA 根证书匹配)
用 CA 签发
openssl x509 -req -sha256 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -out server.crt
客户端证书
和服务端证书类似:
注意:
Common Name可以随意填写
其他需要填写的信息为了避免有误,都填写 . 吧(为了和 CA 根证书匹配)
至此需要的证书都弄好了,我们可以开始配置 NGINX 了。
其中 ssl_client_certificate /etc/nginx/ssl/ca.crt; 的意思是使用 CA 证书来验证请求带的客户端证书是否是该 CA 签发的。
配置好后就就重新加载 NGINX 吧:
service nginx reload
好了,下面我们可以开始验证了。
请求验证
验证过程可以选择在其他机器或是本机,为了能够解析 usb.dev,还需要配置一下 /etc/hosts:
127.0.0.1 usb.dev
如果用浏览器验证,需要把客户端证书导出成 p12 格式的,这里略过。我们重点是通过 curl 进行验证:
curl --insecure --key client.key --cert client.crt ' '
其中 --insecure 是忽略自建 CA 的非权威性。如果你验证正常那说明你运气好,因为这里有个 深坑:某些版本的 curl 会报错:
这些报错版本的 curl 居然要严格要求 --cert 实参的路径要完全正确,比如当前目录下面要用 --cert ./client.crt,用 --cert client.crt 是错误的。爬坑过程是启用了 -v 参数来观察完整的过程,发现其中有一条告警:
转自:
如何在nginx服务器部署ssl证书
1、创建SSL证书
1.1生产私钥,openssl genrsa -des3 -out xn2.lqb.com.key 2048。此命令将生成2048位的RSA私钥,使用DES3算法,私钥文件名可任意命名,在Nginx配置中指定文件路径即可,会提示设定私钥密码,请设置密码,并牢记。
[root@Monitorssl]#opensslgenrsa-des3-outxn2.lqb.com2048 GeneratingRSAprivatekey,2048bitlongmodulus …………………………….+++ ……………………………………………….+++ eis65537(0x010001) Enterpassphraseforxn2.lqb.com: Verifying-Enterpassphraseforxn2.lqb.com:
1.2以上生产的key是有密码的,如果把密码去除,执行如下命令openssl rsa -in xn2.lqb.com -out xn2.lqb.com_nopwd.key
[root@Monitorssl]#ls xn2.lqb.com [root@Monitorssl]#opensslrsa-inxn2.lqb.com-outxn2.lqb.com_nopwd.key Enterpassphraseforxn2.lqb.com: writingRSAkey
1.3由已生产的私钥生成证书请求文件CSR。openssl rsa -in xn2.lqb.com -out xn2.lqb.com_nopwd.key
[root@Monitorssl]#opensslrsa-inxn2.lqb.com-outxn2.lqb.com_nopwd.key Enterpassphraseforxn2.lqb.com: writingRSAkey [root@Monitorssl]#opensslreq-new-keyxn2.lqb.com-outxn2.lqb.com.csr Enterpassphraseforxn2.lqb.com: Youareabouttobeaskedtoenterinformationthatwillbeincorporated intoyourcertificaterequest. WhatyouareabouttoenteriswhatiscalledaDistinguishedNameoraDN. Therearequiteafewfieldsbutyoucanleavesomeblank Forsomefieldstherewillbeadefaultvalue, Ifyouenter’.’,thefieldwillbeleftblank. —– CountryName(2lettercode)[AU]:CN StateorProvinceName(fullname)[Some-State]:shanghai LocalityName(eg,city)[]:shanghai OrganizationName(eg,company)[InternetWidgitsPtyLtd]:xn2.lqb.com OrganizationalUnitName(eg,section)[]:IT CommonName(e.g.serverFQDNorYOURname)[]:xn2.lqb.com EmailAddress[]:2223344@qq.com Pleaseenterthefollowing’extra’attributes tobesentwithyourcertificaterequest Achallengepassword[]: Anoptionalcompanyname[]: [root@Monitorssl]#ls xn2.lqb.comxn2.lqb.com.csrxn2.lqb.com_nopwd.key
1.4.证书请求文件CSR文件必须有CA的签名才能形成证书,可以将此CSR发给StartSSL(可免费)、verisign(一大笔钱)等地方由他来验证。也可以自己做CA,自己给自己颁发证书。创建一个自己签署的CA证书。openssl req -new -x509 -days 3650 -key xn2.lqb.com -out xn2.lqb.com.crt
[root@Monitorssl]#opensslreq-new-x509-days3650-keyxn2.lqb.com-outxn2.lqb.com.crt xn2.lqb.comxn2.lqb.com.csrxn2.lqb.com_nopwd.key [root@Monitorssl]#opensslreq-new-x509-days3650-keyxn2.lqb.com_nopwd.key-outxn2.lqb.com.crt Youareabouttobeaskedtoenterinformationthatwillbeincorporated intoyourcertificaterequest. WhatyouareabouttoenteriswhatiscalledaDistinguishedNameoraDN. Therearequiteafewfieldsbutyoucanleavesomeblank Forsomefieldstherewillbeadefaultvalue, Ifyouenter’.’,thefieldwillbeleftblank. —– CountryName(2lettercode)[AU]:CN StateorProvinceName(fullname)[Some-State]:Shanghai LocalityName(eg,city)[]:shanghai OrganizationName(eg,company)[InternetWidgitsPtyLtd]:lqb.com OrganizationalUnitName(eg,section)[]:IT CommonName(e.g.serverFQDNorYOURname)[]:xn2.lqb.com EmailAddress[]: [root@Monitorssl]#ls xn2.lqb.comxn2.lqb.com.crtxn2.lqb.com.csrxn2.lqb.com_nopwd.key
2、配置nginx虚拟主机文件
[root@Monitorssl]#vim../server.conf server{ listen80; server_namexn2.lqb.com; root/html/xn2; #rewrite^/(.*)$https:xn3.lqb.com/$1permanent; location/{ indexindex.html; #proxy_cachemycache; #proxy_cache_valid2003h; #proxy_cache_valid30130210m; #proxy_cache_validall1m; #proxy_cache_use_staleerrortimeouthttp_500http_502http_503; # #proxy_pass; #proxy_set_headerHost$host; #proxy_set_headerX-Real-IP$remote_addr; } location/images/ { indexindex.html; } } server{ listen*:443; server_namexn2.lqb.com; sslon;###位虚拟主机开启ssl支持 ssl_certificate/usr/local/nginx/conf/server/ssl/xn2.lqb.com.crt;###为虚拟主机指定签名证书文件 ssl_certificate_key/usr/local/nginx/conf/server/ssl/xn2.lqb.com_nopwd.key;###为虚拟主机指定私钥文件 ##ssl_session_timeout5m;####客户端能够重复使用存储在缓存中的会话参数时间 root/html/xn3; location/images/{ indexindex.html; } location/{ proxy_pass; proxy_set_headerHost$host; proxy_set_headerX-Real-IP$remote_addr; } }
nginx配置ssl使用https(解决前端跨域问题)
想要使用https访问nginx上部署的项目首先得有ssl证书,ssl证书可以去阿里云或腾讯云之类的平台购买,当然也有免费的。我这里贴出nginx的相关配置来支持https访问,如果不知道怎样配置或者搞不清楚原理的朋友就直接照搬我的这部分server配置就行。
PS:nginx需要安装ssl模块,如果使用docker启动的nginx则已经有了不需要安装。
这里不仅配置了https对于nginx的访问,还配置了代理来访问后端接口,所以前端在做请求时,请求的地址应该写为 +接口地址,这样前端就能使用https来访问到后端的接口了。
顺便贴一个把http重定向为https的配置
【nginx配置ssl证书】的内容来源于互联网,如引用不当,请联系我们修改。
网友留言: