<返回更多

程序员创业必备:如何让Web服务支持https,有哪些免费CA机构

2021-03-03    
加入收藏

程序员创业必备:如何让Web服务支持https协议,有哪些免费CA机构

原创声明

这是本人署名原创文章,未经许可不支持转载且请勿抄袭。本公众号的所有文章均原创。为了容易理解和记忆,文章以图解为主、代码为辅。如果您感兴趣,欢迎关注!

:吴潇/JAVA高级工程师

我们都知道,http协议是明文传送,安全性很差,被用得越来越少,正在被https协议取代。很多浏览器例如chrome只要访问一个http协议网站,就会弹出风险提示,让用户感觉这个网站不靠谱、有病毒、会泄漏账号密码,不敢进,从而对网站发展产生不利影响。

程序员创业必备:如何让Web服务支持https,有哪些免费CA机构

 

所以,对于要搞副业/创业的程序员来说,搭建web服务一定要支持https。本文就是要教你如何让web服务支持https协议。

假如你对https协议中的SSL证书、CA等概念还不太熟悉,建议先学习一下相关基础,可以参考本篇

现在我们开始搭建https,首先需要一个合法的SSL证书(后文简称"证书")。怎么得到合法证书呢?基本上只有两条路。

向权威CA机构购买证书。

自己创建CA(经过一系列配置,效果等价于权威机构颁发的SSL证书)。

向权威CA机构购买证书的方案是正规渠道,可以实现网站HTTPS化,使网站可信,防劫持、防篡改、防监听、安全加密,适合知名大型网站。然而缺点很明显,就是要花钱,而且不是一次性购买得到的,而是被设置了有效期的,有效期到了之后还要续费才能继续使用,因此不太适合中小型网站/App

程序员创业必备:如何让Web服务支持https,有哪些免费CA机构

某云平台推荐的收费CA机构

购买证书方案的操作比较简单,只要在云平台上找到相应服务,填资料,然后付款即可。

不过,这世界上也是有免费的权威CA机构的,可以试试这家免费CA。如果这个能用,就不用自己搭CA了。这家免费CA机构名为Let's Encrypt,地址 https://letsencrypt.org/,在国外比较有名气。

程序员创业必备:如何让Web服务支持https,有哪些免费CA机构

免费且使用广泛的CA

(某国内排名第一的云平台为什么不推荐这家CA?钱的问题?)

另一个方案就是自己建CA,把CA证书部署到自己的客户端,再用自己的CA给web服务颁发证书。效果上是可以实现https安全性,而且不用花钱买证书,缺点只是没有权威机构的认可罢了。其实,不管是买证书还是自己搭建CA,底层原理都一样。

下面就介绍怎么自己搭建CA,然后给自己的web服务创建证书,最终在自己的app上实现https。

一、创建自己的CA

你可能认为搭建CA很复杂,需要安装服务端软件、写配置文件等。然而,实际上,搭建CA的步骤异常简单。在任意一台安装了openssl(一般系统默认安装好了)的linux机器上,用以下命令生成CA private key:

程序员创业必备:如何让Web服务支持https,有哪些免费CA机构

 

执行以上命令之后,要求输入一个密码(给这个CA private key用)。如果不输入密码,其他人拿到这个CA private key之后,不用输入密码就可以冒充你。输入完密码之后,输出如下:

程序员创业必备:如何让Web服务支持https,有哪些免费CA机构

 

然后,执行以下命令生成根证书(CA证书):

程序员创业必备:如何让Web服务支持https,有哪些免费CA机构

 

然后输入前面CA private key的密码,回答一系列问题(即查看证书时显示出来的单位名称、国家、地区之类的信息)。

程序员创业必备:如何让Web服务支持https,有哪些免费CA机构

 

到目前为止,已经创建了2个文件 myCA.key(即CA private key)和myCA.pem(CA根证书)。持有这2个文件,你就已经成为一个CA,当然,是不出名的那种。

二、CA证书安装到客户端

有了CA private key和CA证书之后,把CA根证书安装到客户端上,这个客户端访问自己的web服务就是https的了。但是,没有安装CA证书的客户端访问你的web服务,依然不支持https。

不同平台的客户端安装CA证书的方法不太一样,例如在Android手机上,可以访问"设置->安全和隐私->更多安全设置->加密和凭据"来查看已经安装的CA证书(凭据)和安装自己的CA证书。

程序员创业必备:如何让Web服务支持https,有哪些免费CA机构

android上如何管理根证书

三、给web服务器创建证书

有了CA private key 和 CA根证书后,我们就可以对web服务的证书进行签名了。web服务器也需要自己创建一个证书(然后拿去给CA签名),步骤如下。首先创建一个web server用的private key,命令如下:

程序员创业必备:如何让Web服务支持https,有哪些免费CA机构

 

然后,创建一个CSR(Certificate Signing Request)文件,

程序员创业必备:如何让Web服务支持https,有哪些免费CA机构

 

这里的操作与上面生成CA证书的操作类似。

接下来,再创建一个配置文件。这个配置文件(文本文件)主要是用来定义Subject Alternative Name (SAN) 扩展的(具体见https://deliciousbrains.com/https-locally-without-browser-privacy-errors/#creating-self-signed-certificate)。例如,创建下面这样的配置文件(需要根据你的网站/app名做一些修改):

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = dev.mergebot.com
DNS.2 = dev.mergebot.com.192.168.1.19.xip.io

最后就是用CSR文件、CA private key 、CA根证书和刚才创建的配置文件,执行以下命令生成证书(用自己的CA签名):

程序员创业必备:如何让Web服务支持https,有哪些免费CA机构

 

openssl x509 -req -in dev.mergebot.com.csr -CA myCA.pem -CAkey myCA.key -CAcreateserial 
-out dev.mergebot.com.crt -days 1825 -sha256 -extfile dev.mergebot.com.ext

提示输入CA private key的密码,输入之后,就得到web服务的证书CRT文件了。

四、把CRT证书文件部署至Linux服务器

把CRT证书文件部署到web服务器有很多种方法,操作不大相同,这里介绍:1)如何把CRT部署到Nginx上;2)把CRT整合到Spring Boot项目中。这两个方法应该满足大多数项目的需要了。另外,独立部署的Tomcat服务器应该也支持配置CRT证书,可以自行搜索资料学习。

1)CRT部署到Nginx服务器

让web服务器支持https需要安装Nginx,这里假设nginx服务已经部署好了。打开nginx的配置文件(例如/etc/nginx/sites-available/yoursite.com),找到server段,增加以下指令:

listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /crt文件路径/;
ssl_certificate_key /web服务privateKey文件路径;

修改完nginx配置文件之后,再通过以下命令重启nginx即可实现https!

sudo service nginx reload

2)CRT部署到Spring Boot项目

把CRT集成到Spring Boot项目非常简单(主要原因是Spring Boot太强了),只需要在项目配置文件(例如application.properties)中修改名为"server.ssl.***"的属性即可,例如:

程序员创业必备:如何让Web服务支持https,有哪些免费CA机构

Spring Boot中与SSL相关的配置

通过配置文件支持https之后,原来的http访问方式就不再支持了。如果还需要支持http的访问方式,让http跳转到https,那么还需要在Spring中部署以下代码:

程序员创业必备:如何让Web服务支持https,有哪些免费CA机构

让 http自动跳转至https的代码

权威讲解建议参考SpringBoot官方文档
https://docs.spring.io/spring-boot/docs/2.1.8.RELEASE/reference/html/howto-embedded-web-servers.html#howto-configure-ssl

这样,https服务就搭建起来了。

现在你学会如何把http服务升级到https了吧?有没有试着搭建一下自己的CA(只需要2条命令)?本文所述方法有什么缺点吗?有更简单的方法吗?欢迎留言。

参考资料:

https://deliciousbrains.com/https-locally-without-browser-privacy-errors/
https://spinupwp.com/hosting-wordPress/ target=_blank class=infotextkey>WordPress-yourself-ssl-spdy/
https://deliciousbrains.com/ssl-certificate-authority-for-local-https-development/
https://zhuanlan.zhihu.com/p/31385073
https://blog.csdn.net/l4642247/article/details/81631770

以上分析希望对您的工作和面试有帮助。如果对互联网编程技术、Java、Spring、Android、C/C++、Linux、个性化推荐、Community Detection、machine Learning、Deep Learning、Data Mining、Gnuplot、LaTeX等技术感兴趣的话,欢迎关注本公众号。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>