目录
前言
因为在做oauth2授权登录的时候,第三方授权服务器配置的回调地址需要使用https的方式,故总结一下如何通过nginx来完成自己生成证书并配置https访问;
步骤原理
- 通过OpenSSL工具生成证书;
- 将生成的证书配置在nginx;
通过OpenSSL工具生成证书
创建私钥
$ openssl genrsa -des3 -out server.key 2048
# server文件名,可根据需要命名
根据提示输入密码
注意,centos版本如果是
CentOS Linux release 8.0.1905 (Core)
版本,私钥长度不能设置成1024位,必须2048位。不然再最后启动nginx时会出如下错误。nginx: [emerg] SSL_CTX_use_certificate("/etc/nginx/ssl/server.crt") failed (SSL: error:140AB18F:SSL routines:SSL_CTX_use_certificate:ee key too small)
创建csr证书
$ openssl req -new -key server.key -out server.csr
#其中key文件为刚才生成的文件。
执行上述命令后,需要输入一系列的信息。输入的信息中最重要的为Common Name,这里输入的域名即为我们要使用https访问的域名 ,比如我输入的是localhost。其它的内容随便填即可。
以上步骤完成后,ssl文件夹内出现两个文件:server.csr 和 server.key
去除密码
$ openssl rsa -in server.key -out server_nopwd.key
#在加载SSL支持的Nginx并使用上述私钥时除去必须的口令,否则会在启动nginx的时候需要输入密码
然后输入密码,这个密码就是上文中在创建私钥的时候输入的密码
生成crt证书
$ openssl x509 -req -days 365 -in server.csr -signkey server_nopwd.key -out server.crt
#至此,证书生成完毕。我们发现,ssl文件夹中一共生成了4个文件。下面,配置https服务器的时候,我们需要用到的是其中的server.crt和server_nopwd.key这两个文件。
将生成的证书配置在nginx
在nginx.conf文件中,找到HTTPS server配置部分,把该段代码前面的#号去掉。然后分别修改其中的ssl_certificate和ssl_certificate_key配置项为刚才所生成的server.crt和server_nopwd.key这两个文件的目录。并配置server_name为localhost。修改后的该段配置如下:
# HTTPS server # server { listen 443 ssl; server_name localhost; ssl_certificate ssl/server.crt; ssl_certificate_key ssl/server_nopwd.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; } }
启动nginx,并访问https://localhost
熟悉的界面,大功告成!!!