前言
https加密协议恐怕是没办法避免的了。无论苹果还是微信现在很多地方都要用到https协议。不是的话就不给过。
也是醉了。
好了,说明一下这篇文章是:
nginx+ca+https设置【草稿试验版】
中最后试验出来的,
然后大约参考了:
【HTTPS】自签CA证书 && nginx配置https服务
openssl、x509、crt、cer、key、csr、ssl、tls 这些都是什么鬼?
强烈推荐:【因为这一篇可以一步到位完成】
如何为nginx配置https(免费证书)
配置过程
目录准备
我们先新建一个目录:
mkdir -p /etc/pki/CA/
cd /etc/pki/CA/
为什么偏要这个目录??额,我也不知道不过,
这个目录想必是openssl默认位置了。放在一起方便点吧。
然后,值得注意的是,为了方便新建多个证书,下面我将新建了各个文件夹,譬如,localhost,
mkdir -p localhost
cd localhost
错误隐患以及事先预防
这里提醒一下,等下用openssl命令行的时候可能会报错误,在草稿篇里面遇到过:
然后,问题1出现:
ca: ./demoCA/newcerts is not a directory
./demoCA/newcerts: No such file or directory
解决方案:
于是:
你可以在这样解决
cd /etc/pki/CA/
mkdir -p demoCA/newcerts
touch demoCA/index.txt
touch demoCA/serial
echo '01'>demoCA/serial
nginx开启https需要什么证书?
之前写过一篇《tomcat https配置方法(免费证书)》的简书(想看的可以去我的主页里面看下,这两篇之间还是有许多相关联的知识的~),里面有提到过常用证书的分类,其中nginx使用的就是PEM格式的证书,我们将其拆分开就是需要两个文件,一个是.key文件,一个是.crt文件.
作者:夜_雪
链接:https://www.jianshu.com/p/9523d888cf77
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
生成key文件且去除密码
注意,1024位已经不安全了啊,现在要2048了,请参考:
cd /etc/pki/CA/localhost/
openssl genrsa -des3 -out server.key 2048
生成key的时候是需要密码的,不过,需要注意的是,假如直接拿这个key来用,那么每次用到它都要输一次密码,而用系统systemctl restart nginx的时候也会因为没有输入密码而导致:
这样的错误,所以为了方便,接下来是必然去掉密码好点的:
openssl rsa -in server.key -out server.key
创建服务器证书的申请文件server.csr
openssl req -new -key server.key -out server.csr
这里注意一下,
需要你输入很多内容,更有一个common name要留心,因为:
其中Country Name填CN,Common Name填主机名也可以不填,如果不填浏览器会认为不安全.(例如你以后的url为https://abcd/xxxx…这里就可以填abcd),其他的都可以不填.
作者:夜_雪
链接:https://www.jianshu.com/p/9523d888cf77
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
另外已经有兄弟遇到过了:
解决自建ca认证后浏览器警告
所以我们这样来做:
现在已经有私钥key,然后成功生成了csr — 证书签名申请 文件,接下来就是创建ca证书了
创建CA证书
openssl req -new -x509 -key server.key -out ca.crt -days 3650
ca的证书拿到手了,然后给自己做一个证书吧。
创建自当前日期起有效期为期十年的服务器证书server.crt
openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey server.key -CAcreateserial -out server.crt
ls你的文件夹,可以看到一共生成了5个文件:
ca.crt ca.srl server.crt server.csr server.key
其中,server.crt和server.key就是你的nginx需要的证书文件.
nginx配置
这里,只作为本地测试,我就配置为http和https共存。
注意,我们没有生成pem文件,ssl_certificate_key用的是 key文件。
当然你可以参考一下下文作者:
打开你的nginx配置文件,搜索443找到https的配置,去掉这段代码的注释.或者直接复制我下面的这段配置:
server {
listen 443;
server_name localhost;
ssl on;
ssl_certificate /root/Lee/keys/server.crt;#配置证书位置
ssl_certificate_key /root/Lee/keys/server.key;#配置秘钥位置
#ssl_client_certificate ca.crt;#双向认证
#ssl_verify_client on; #双向认证
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;
将ssl_certificate改为server.crt的路径,将ssl_certificate_key改为server.key的路径.
nginx -s reload 重载配置
至此,nginx的https就可以使用了,默认443端口.
作者:夜_雪
链接:https://www.jianshu.com/p/9523d888cf77
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
这里我的配置是:
重启服务,查看结果
注意,如果你的nginx没有开启ssl功能,那么就只能自己编译了。
http访问:
https访问:
大功告成。