HTTPS与自制SSL证书

这篇具有很好参考价值的文章主要介绍了HTTPS与自制SSL证书。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

HTTPS原理

我们先来看看黑客是如何盗取客户端和服务端通讯的真实报文的。

对称密钥

对称密钥是客户端和服务端加解密时共用的一个密钥,因为是共用密钥,必然存在一个密钥传输的过程,黑客可以通过截取报文的方式拿到这个对称密钥,对后续的密文进行解密。

非对称密钥

非对称密钥是客户端和服务端各保有一对自己的公私钥,并将公钥发送给对方。发送方用对方的公钥加密数据,用自己的私钥签名数据,接收方收到密文后,用对方的公钥验签,用自己的私钥解密数据。

由于在双方通讯过程中不存在私钥的传输,黑客就无法轻易地直接从报文中拿到私钥。但也并非无懈可击了,黑客可以在中间通过模拟客户端和服务端,分别对双方进行欺骗,获取到真实报文:

首先,在双方交换公钥时,黑客拦截报文记录双方的公钥,并将自己的公钥替换进去;

然后,发送方用黑客传回的公钥加密数据,用自己的私钥签名数据发送出去,黑客拦截报文,用发送方的公钥验签,用自己的私钥解密获得真实报文。

SSL证书

为了防止黑客模拟服务端进行欺骗,这时候就需要一个有公信力的第三方介入,对服务端的真伪进行甄别,这个第三方就是CA机构(Certificate Authority),具体工作过程是这样的:

首先,客户端内置了常用CA机构的证书,其中包含CA机构公钥;

然后,CA机构颁发给网站的证书(服务器证书),包含了服务器公钥、域名信息等,以及CA机构私钥对服务器公钥、域名等一系列信息的签名;

最后,客户端接收到服务器证书时,使用CA证书包含的公钥对服务器证书的签名进行校验,校验通过才会使用服务器公钥加密传输对称密钥给服务端,后续再使用这个对称密钥加解密报文。

HTTPS与自制SSL证书

简单来说就是客户端用预置的CA证书对服务端发送的服务器证书进行真伪判断。

自制SSL证书

自制SSL证书需要生成两种证书:CA机构证书、服务器证书。

服务器证书是由CA机构颁发,安装在服务器上,例如nginx、tomcat等;

CA机构证书提供给各个客户端安装,常用浏览器、手机等已经内置了各大常用CA机构的证书,但我们自制证书就需要手动安装了。

自制SSL证书(mkcert)

安装mkcert

mkcert 是一个用于生成本地自签名 SSL 证书的开源工具,项目基于 Golang 开发,可跨平台使用,不需要配置,支持多域名以及自动信任 CA。

下载地址:https://github.com/FiloSottile/mkcert/releases

按照操作系统类型选择合适的版本,这里使用mkcert-v1.4.4-linux-amd64版本。

#重新命名

cp mkcert-v1.4.4-linux-amd64 mkcert

#增加执行权限

chmod +x mkcert

#执行测试命令,会返回mkcert当前版本号为1.4.4

./mkcert -version

生成CA证书

mkcert 支持自动信任 CA,需要在服务器生成CA 证书,并在客户端安装,以解决私有证书在客户端不受信任的问题。

#在服务器生成CA证书

mkcert -install

#查看证书位置

mkcert -CAROOT

HTTPS与自制SSL证书

 可以看到目录下有两个文件:rootCA-key.pem和rootCA.pem ,把rootCA.pem拷贝到客户端,重命名为rootCA.crt,双击安装即可。 ​​​​​​HTTPS与自制SSL证书

生成服务器证书

#生成服务器证书方式一:直接生成

./mkcert 域名1 域名2 域名3...

HTTPS与自制SSL证书

在当前目录生成xxx.pem和xxx-key.pem两个文件。

#生成服务器证书方式二:指定证书名和私钥名

./mkcert -cert-file ./server.crt -key-file ./server.key 域名1 域名2 域名3...

HTTPS与自制SSL证书

 在当前目录生成server.crt和server.key两个文件。

查看mkcert更多用法:

./mkcert -help

Usage of mkcert:

	$ mkcert -install
	Install the local CA in the system trust store.

	$ mkcert example.org
	Generate "example.org.pem" and "example.org-key.pem".

	$ mkcert example.com myapp.dev localhost 127.0.0.1 ::1
	Generate "example.com+4.pem" and "example.com+4-key.pem".

	$ mkcert "*.example.it"
	Generate "_wildcard.example.it.pem" and "_wildcard.example.it-key.pem".

	$ mkcert -uninstall
	Uninstall the local CA (but do not delete it).

Advanced options:

	-cert-file FILE, -key-file FILE, -p12-file FILE
	    Customize the output paths.

	-client
	    Generate a certificate for client authentication.

	-ecdsa
	    Generate a certificate with an ECDSA key.

	-pkcs12
	    Generate a ".p12" PKCS #12 file, also know as a ".pfx" file,
	    containing certificate and key for legacy applications.

	-csr CSR
	    Generate a certificate based on the supplied CSR. Conflicts with
	    all other flags and arguments except -install and -cert-file.

	-CAROOT
	    Print the CA certificate and key storage location.

	$CAROOT (environment variable)
	    Set the CA certificate and key storage location. (This allows
	    maintaining multiple local CAs in parallel.)

	$TRUST_STORES (environment variable)
	    A comma-separated list of trust stores to install the local
	    root CA into. Options are: "system", "java" and "nss" (includes
	    Firefox). Autodetected by default.

自制SSL证书(openssl)

由于mkcert在生成证书时命令很简单,相应的可选配置也较少,例如无法约定证书的有效期等等,所以一般用于测试使用,在正式环境中最好还是使用openssl,下面是使用openssl制作ssl证书的步骤:

生成CA证书

#生成CA私钥文件myCA.key,需要设置CA私钥密码

openssl genrsa -des3 -out myCA.key 2048
HTTPS与自制SSL证书

 #生成CA证书myCA.crt,需要验证CA私钥密码

openssl req -x509 -new -nodes -key myCA.key -sha256 -days 36500 -out myCA.crt -subj "/C=CN/ST=ca-province/L=ca-city/O=ca-org/OU=ca-group/CN=ca-domin"

#查看CA证书内容

openssl x509 -in myCA.crt -noout -text

HTTPS与自制SSL证书

生成的CA证书可直接拷贝至客户端双击安装,与上面安装CA证书动图中的步骤一样。

生成服务器证书

#生成服务器私钥文件server.key

openssl genrsa -out server.key 2048

#生成服务器证书申请文件server.csr

openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=server-province/L=server-city/O=server-org/OU=server-group/CN=192.168.20.20/CN=192.168.20.50/CN=localhost"

#创建服务器证书配置文件cert.ext

vi cert.ext

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost
IP.2 = 192.168.20.20
IP.3 = 192.168.20.50

#用CA证书和CA私钥文件签署服务器证书server.crt

openssl x509 -req -in server.csr -out server.crt -days 36501 -CAcreateserial -CA myCA.crt -CAkey myCA.key -CAserial serial -extfile cert.ext

HTTPS与自制SSL证书

Nginx安装SSL证书

docker安装nginx过程参考:

Docker安装Nginx_日华子文的博客-CSDN博客_docker nginx安装

#拷贝证书至docker挂载配置文件的目录

cp soft/ssl/server.crt docker-nginx/conf/

cp soft/ssl/server.key docker-nginx/conf/

#修改配置文件default.nginx,在文件最下方添加server

vi docker-nginx/conf/default.conf

server {
     #SSL 默认访问端口号为 443
     listen 443 ssl;
     #请填写绑定证书的域名
     #server_name cloud.tencent.com;
     #请填写证书文件的相对路径或绝对路径
     ssl_certificate /etc/nginx/conf.d/server.crt;
     #请填写私钥文件的相对路径或绝对路径
     ssl_certificate_key /etc/nginx/conf.d/server.key;
     ssl_session_timeout 5m;
     #请按照以下协议配置
     ssl_protocols TLSv1.2 TLSv1.3;
     #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
     ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
     ssl_prefer_server_ciphers on;
     location / {
         #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
         #例如,您的网站主页在 Nginx 服务器的 /etc/www 目录下,则请修改 root 后面的 html 为 /etc/www。
         root /usr/share/nginx/html;
         index  index.html index.htm;
     }
 }

注意此处证书的路径要填写容器内配置文件目录的绝对路径,或nginx.conf的相对路径。

#重启nginx容器

docker restart nginx

#如果启动失败,可以查看容器日志排查问题

docker logs -ft --tail 100 容器名

重启浏览器访问nginx

HTTPS与自制SSL证书

过程参考资料:

mkcert 使用指南:如何快速创建自签名 SSL 证书_Xpitz的博客-CSDN博客_mkcert

https://gist.github.com/liuguangw/4d4b87b750be8edb700ff94c783b1dd4

SSL 证书 Nginx 服务器 SSL 证书安装部署-证书安装-文档中心-腾讯云

证书格式转换

上面的操作中,生成的都是crt/key证书,nginx可以直接使用,但如果想要在tomcat中使用的话,就需要转换证书格式为jks,下图是各大主流中间件对应的的证书格式类型。

HTTPS与自制SSL证书

 #crt/key转换为pfx

openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt

HTTPS与自制SSL证书

 #pfx转换为jks

keytool -importkeystore -srckeystore server.pfx -destkeystore server.jks -srcstoretype PKCS12 -deststoretype JKS

HTTPS与自制SSL证书

 Tomcat安装SSL证书

修改server.xml

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="D:\ssl\server.jks"
						certificateKeystorePassword="123456"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>

重启tomcat

HTTPS与自制SSL证书

更多证书格式转换参考:

https SSL主流数字证书都有哪些格式? - lhj588 - 博客园文章来源地址https://www.toymoban.com/news/detail-415431.html

到了这里,关于HTTPS与自制SSL证书的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • HTTPS请求忽略SSL证书

    现场环境: 后端服务部署在docker内,远程调用https接口,线上报错: unable to find valid certification path to requested target 解决方案: 设置SSLSocketFactory忽略证书校验 实现案例: 使用的cn.hutool.http.HttpRequest工具类请求的数据,支持设置头部、表单、body、超时时间等关键信息 工具类 SSL

    2024年02月11日
    浏览(50)
  • Gitlab https(ssl证书)

    由于公司安全部门整活,需要将gitlab配置https。所以有了这篇文章——将http的gitlab配置ssl证书,使其自动跳转https访问 方法1、直接配置 gitlab会自动生成证书(由于自建证书,浏览器会提示不安全) 之后,重新配置 方法2、使用阿里云证书 阿里云创建下载nginx证书 解压得到

    2024年02月07日
    浏览(37)
  • SpringBoot配置https(SSL证书)

    第一步: 首先得明白什么是wss协议: 可以看这篇文章:WSS、SSL 和 https 之间的关系 第二步: 先拿到ssl证书:我这边是用的阿里云的免费证书具体获取方法如下: 可以参考:阿里云申请免费 SSL证书 https 的图文教程_林中明月间丶-CSDN博客_阿里云申请免费ssl证书 将下载的证书压缩包解

    2024年02月11日
    浏览(48)
  • tomcat ssl证书 https配置

    先记得配置安全组 443 阿里云SSL控制台下载SSL证书并解压 把解压的文件放入远程服务器Tomcat目录下的conf目录 进入Tomcat conf目录配置server.xml文件,需要修改两个地方 一个 端口号 一个 证书的路径和密码 http自动重定向到https 修改web.xml, 放到最后 然后重启tomcat

    2024年01月18日
    浏览(55)
  • MAC: 自己制作https的ssl证书(自己签发免费ssl证书)(OPENSSL生成SSL自签证书)

    现在https大行其道, ssl又是必不可少的环节. 今天就教大家用开源工具openssl自己生成ssl证书的文件和私钥 MAC电脑 openssl工具自行搜索安装 1、终端执行命令 2、输入密码,这里会输入两次. 填写一样即可. 随意填写一个. 下一步就会删除这个密码 3、输入密码,这里会输入两次. 填写

    2024年04月14日
    浏览(77)
  • 群晖添加SSL证书,开启https

    登录阿里云,打开控制台,找到SSL证书,前提是你已经有了一个域名,并已经将域名映射到了nas上了。 选择SSL证书,免费证书,创建证书 证书申请 输入对应资料,等待审核,审核通过之后,下载证书。 下载申请好的证书 选择下载的类型,一般使用nginx、或者Apache的证书 下

    2024年02月15日
    浏览(65)
  • RestTemplate HTTPS请求忽略SSL证书

    使用RestTemplate发送HTTPS请求的时候,出现了这样的一个问题: RestTemplate 默认不支持https协议 解决方案:         第一种是忽略认证         第二种是导入证书,比较复杂(比第一种安全)  这里说一下第一种解决方案,忽略认证 版本:Spring Boot2.x RestTemplateConfig 测试代

    2024年02月10日
    浏览(49)
  • 配置https---Nginx认证ssl证书

    nginx作为前端的负载均衡服务器已经很熟悉了,项目需要使用https安全的时候就需要认证证书了 dockerweb管理工具 Portainer 如果对docker不那么熟悉可以使用docker 第三方管理端 然后访问本地9000端口,登录后可以管理容器镜像 有了该工具可以直接进入容器查看日志等操作 nginx环境安装

    2024年01月19日
    浏览(50)
  • IIS 更换https的ssl证书

    1.打开服务器管理器--》选择工具打开IIS管理器 2.打开主页点击服务器证书   3.导入证书  4.选择证书所在位置导入证书 5.打开需要更新证书的网站,编辑网站--》绑定 6.选择对应的地址以及证书进行更新即可  

    2024年04月16日
    浏览(38)
  • 想入门网络安全?先来看看网络安全行业人才需求!

    如果你是一个想要入门网络安全行业的小白、如果你是网络安全专业在读的大学生、如果你是正在找工作的新手,那么这篇文章你一定要仔细看。毕竟知己知彼百战百胜,知道行业的人才需求才能更好得发挥自己的优势。 当你打开BOSS直聘、拉钩等招聘网站,在首页的导航栏

    2024年02月01日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包