admin

[服务器相关] 搭建有效SSL证书的HTTPS站点

1.搭建HTTPS站点,首先必须的就是证书问题,渠道有好多,但是一定要有自己的域名(keytool生成的除外),否则无法进行SSL证书的申请!


(1)付费版:腾讯云,阿里云之类的一大把。土豪请随意,但这里要提一下,阿里云可以申请免费的,但是手续很麻烦,有空的朋友可以了解下。


进入阿里云:https://cn.aliyun.com/product/cas


然后选择立即购买,进入购买页后,要先选择证书品牌,选择Symantec,然后才会弹出免费型DV的选项,后续的操作就自己操作吧。


 




-------------------------------------------------------------------------------------------


(2)免费版


免费版之前有篇文章讲解如何通过java的KeyTools生成免费证书,但是这种纯粹用来玩玩就好了,下面说下LetsEncrypt这个免费证书,官方网站:https://letsencrypt.org,了解了相关信息后,我们去申请该证书,当然,也可以自己动手,按照官方的手册,自己搭建环境生成SSL证书,但这里我是通过第三方网站来生成的,网址如下:https://freessl.org,一句话概括就是简单无脑有成效,我们需要做的就是登陆自己域名所在服务器去验证下该服务器的所有权是不是本人的就可以了,其他它帮你搞定!步骤如下:


1.输入自己的域名,当然这里的域名是我虚构的,然后选择证书品牌,点击创建免费域名




 


2.根据自己的需要选择,邮箱是接收一些通知信息的,比如快到期的时候,他会发通知给你进行续期(其实是要重新申请),这里验证方式我推荐是文件认证,因为只要把它要求的文件放到域名所对应的服务器上,然后我们通过他指定的路径能访问到这个文件,他就认为这个服务器的所有权是你的才给你验证通过




点击创建后,会出来下面的界面




这里他给出了一个文件路径do1shoje.cn/.well-known/pki-validation/fileauth.txt,什么意思呢?上面已经说到了,我任何一个浏览器,只要我能访问到正常访问到这个url,然后该文件内记录的值等于它给定的值


(这里是201805200304223ek9pdaejm21kzl47ih45fvw5j76w7fqx05gag9nou4zb2uoru),满足了这2个条件即认证成功,所以我们要把这个文件下载下来,放到服务器上,然后想办法通过这个地址do1shoje.cn/.well-known/pki-validation/fileauth.txt可以访问到这个文件即可,当我们浏览器测试成功后,点击【文件验证】按钮,一般你浏览器测试可以访问,这一步基本上没问题了。来看看我是怎么做的,因为我的服务器上搭了Nginx,通过nginx做跳板,所以我nginx配置文件里是这样配置的:


location /.well-known/pki-validation/ {

        root E:/soft/nginx/nginx-1.14.0;


autoindex on;


 }


因为我是把nginx看成了一个静态资源服务器,所以需要自己建个目录,来对应上面的路径,然后把指定的文件扔到指定的目录即可




 


重启nginx,最终测试浏览器访问成功,点击文件验证,ok,然后他就自动帮你生成了一系列东西,然后下载他给的zip文件,里面有ca证书和私钥,我测试时时压缩包里的2个文件是xxx.pem文件和xxx.key文件,好的,证书拿到手了,现在就是考虑怎么应用到站点里,


------------------------应用到站点--------------------------


如果用nginx做跳板,那就需要启用nginx的https模块,然后rewrite到https站点,即原理就是,https访问nginx,nginx再重定向到https站点,这种情况一般都是nginx单独作为一台代理服务器,站点作为一台web服务器,另外https都是跟域名挂钩的,因为SSL证书认证的是域名,不是IP,即使你访问百度https://14.215.177.38/,也是会提示证书不信任,因为证书认证的是www.baidu.com,而不是baidu的ip。这也就是为什么申请时一定需要域名了


我的服务器场景是:nginx和tomcat都装在一台机里,上nginx的配置文件好了:


 


#HTTPS


server {


        listen      8889 ssl;#默认是443,但是我的443端口被占用了,改成了8889

        server_name  do1shoje.cn;



        ssl_certificate      ../ca/cert.pem;#上面下载下来的CA证书

        ssl_certificate_key  ../ca/cert.key;#上面下载下来的秘钥



        ssl_session_cache    shared:SSL:1m;

        ssl_session_timeout  5m;



        ssl_ciphers  HIGH:!aNULL:!MD5;


        ssl_prefer_server_ciphers  on;


#rewrite  自己写


        


    }


好的,nginx配置完毕,nginx只需配置该内容即可,然后我们回到tomcat,修改tomcat的server.xml文件,


#如果不需要nginx,则只配置tomcat就可以了


<Connector port="8889" protocol="org.apache.coyote.http11.Http11AprProtocol"

               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"

               SSLCertificateFile="D:\ca\cert.pem"  

              SSLCertificateKeyFile="D:\ca\cert.key"  

              SSLProtocol="TLSv1+TLSv1.1+TLSv1.2" URIEncoding="UTF-8"/>


这里请注意protocol="org.apache.coyote.http11.Http11AprProtocol"这个地方,


tomcat默认的协议是protocol="org.apache.coyote.http11.Http11Protocol",这样,HTTPS搭建站点即告一段落,后续通过域名加端口号+项目的URL即可(因为我这里默认的80被用了,所以只能加上端口号,do1shoje.cn不加端口号其实默认是do1shoje.cn:80)


但这样只能通过https访问,要是需要输入http://do1shoje.cn也能跳转到https://do1shoje.cn呢?


 


在项目web.xml末尾加上如下配置即可:


<security-constraint>


    <web-resource-collection >


              <web-resource-name >SSL</web-resource-name>


              <url-pattern>/*</url-pattern>


       </web-resource-collection>


       <user-data-constraint>


       <transport-guarantee>CONFIDENTIAL</transport-guarantee>


       </user-data-constraint>


</security-constraint>


然后我们访问Http端口时就会跳转到https协议端口


最后,上最终效果图




 


如果搭建的是IIS站点,需要将PEM转成.pfx格式,在Linux或者Mac执行


openssl pkcs12 -export -out cert.p12 -in cert.pem -inkey cert_key.key -passin pass:root -passout pass:root


(cert.p12:转换PEM后生成的文件名,cert.pem:申请的pem格式证书名,cert_key.key申请的pem格式证书秘钥,root:打开或安装证书时需要该密码)


然后需要在IIS的服务器证书上导入该证书

 ———————————————— 

版权声明:本文为CSDN博主「简乐君」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/u012557538/article/details/80389071


#1楼
发帖时间:1月前   |   查看数:0   |   回复数:0
游客组