使用OpenSSL创建自签名SSL证书

本文介绍了在没有公网IP和域名的内网环境中,如何利用OpenSSL生成免费的自签名SSL证书,并在Nginx服务器上进行安装配置。首先,详细阐述了创建自签名证书的步骤,包括配置文件的制作和证书的生成。然后,讲解了在Nginx和Windows系统中安装证书的方法。最后,提到了SSL证书安装后的后续处理,如前后端代码中协议调整为https。
摘要由CSDN通过智能技术生成

近期的工作中遇到了数据传输加密的需求,就是在数据传输安全层面都要求使用https协议,因此为Web站点安装SSL证书就成了必须,以下就过程记录。


1.需求及选型

需求有两条:

  • 支持内网IP地址

我们很多项目都是在内部局域网运行,没有公网IP,更没有域名,因此必须能支持内网IP地址。

  • 免费

相当一部分SSL证书需要付费购买,虽然一般不是很贵,成本也需要稍稍考虑一下。免费的SSL证书也有不少地方可以申请,但是能支持内网IP地址的好像没有。

基于这两条考虑,考虑使用开源组件OpenSSL创建自签名SSL证书。自己发给自己的证书,可不就想怎么改就怎么改。

2.OpenSSL创建自签名证书过程

2.1安装或更新OpenSSL组件

CentOS操作系统是自带OpenSSL组件,可以选择直接使用或者更新后使用。

在这里插入图片描述

查看OpenSSL版本

openssl version

获取最新版本OpenSSL

wget https://www.openssl.org/sources/openssl-1.1.1k.tar.gz

解压后进行编译安装配置,升级到最新版本

tar -zxvf openssl-1.1.1k.tar.gz #解压
cd openssl-1.1.1k #打开目录
./config --prefix=/usr/local/openssl  
make && make install
mv /usr/bin/openssl /usr/bin/openssl.bak
ln -sf /usr/local/openssl/bin/openssl /usr/bin/openssl
echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
ldconfig -v 

在这里插入图片描述
可以查看OpenSSL提供的命令
在这里插入图片描述

2.2 创建证书配置文件

创建一个后缀为cnf的配置文件,名称随便起,但是要记得,后面会用到。

[req]
distinguished_name = req_distinguished_name #与下方[req_distinguished_name]一致
encrypt_key = no
req_extensions = req_ext #与下方[req_ext]一致

[req_distinguished_name]
countryName = CN
countryName_default = US
stateOrProvinceName = JiangSu
stateOrProvinceName_default = JiangSu
localityName = NanJing
localityName_default = NanJing
organizationalUnitName  = Work
organizationalUnitName_default  = Work
commonName = www.默认域名或IP.com
commonName_max  = 64

[req_ext]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names #与下方[alt_names]一致

[alt_names]
DNS.1 = www.域名1.com
DNS.2 = *.域名2.com
DNS.3 = 域名3
IP.1 = 192.168.199.86
IP.2 = 192.168.199.1
IP.3 = 127.0.0.1

其中req_distinguished_name项内是证书的基本信息,alt_names是可以使用证书的域名和IP地址,可以填写多个。

注意:req_distinguished_name、req_ext、alt_names这几个要前后对应

2.3 创建自签名SSL证书

总体过程是先创建一个私钥,然后通过私钥创建一系列证书。

下面是在CentOS中的执行示例

生成ca证书

#输出私钥ca.key,使用rsa算法、2048位
openssl genrsa -out ca.key 2048 
#根据私钥ca.key生成ca.csr,使用配置文件san.cnf,扩展项为req_ext
openssl req -new -key ca.key -out ca.csr -config san.cnf -extensions req_ext 
#签发证书ca.crt
openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt -extfile san.cnf -extensions req_ext 

生成client证书

#输出私钥client.key,使用rsa算法、2048位
openssl genrsa -out client.key 2048
#根据私钥client.key生成client.csr,使用配置文件san.cnf,扩展项为req_ext
openssl req -new -key client.key -out client.csr -config san.cnf -extensions req_ext
#签发证书client.crt
openssl x509 -req -sha256 -extfile req_ext -CA ca.crt -CAkey ca.key -CAcreateserial -in client.csr -out client.crt

通过命令行可以查看密钥的内容

#查看ca.key内容,文本形式,不输出
openssl rsa -in ca.key -text -noout

在这里插入图片描述

最后生成的是这么一堆文件
在这里插入图片描述

后缀为crt的就是我们需要的证书文件。

3安装SSL证书

3.1 Nginx站点安装SSL证书

找到站点所在的Niginx服务器,打开配置文件nginx.conf

# HTTPS server
#
server {
listen 8008 ssl; #世界的端口号
server_name  #需要访问的域名,这里也不用加https;

ssl on; #启用SSL 

ssl_certificate /usr/local/nginx/ssl/ssl.pem; #这里是ssl key文件存放的绝对路径,根据自己的文件名称和路径来写
ssl_certificate_key /usr/local/nginx/ssl/ssl.key; #这里是ssl key文件存放的绝对路径,根据自己的文件名称和路径来写

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;

ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

location / {
proxy_pass http://需要访问的域名:8080/;
}
}

之后重启Niginx即可生效。

如果你的服务器安装了宝塔bt运维工具,为站点安装SSL证书的过程就更方便了,完全的图形化操作过程。
打开站点配置>SSL>其他证书,分别将私钥ca.key与证书ca.crt中内容拷贝到文本框中,保存即可。
在这里插入图片描述

3.2 Windows操作系统安装证书

双击证书ca.crt,弹出提示框,开始证书安装。

在这里插入图片描述
选择证书安装,进入证书导入向导界面,选择存储位置为“本地计算机”。

在这里插入图片描述
继续下一步,将证书安装至“受信任的根证书颁发机构”。
在这里插入图片描述

4.后续处理

SSL证书创建完、安装完并不是就结束了,开发人员的工作还没结束呢。
目前我们采用的是前后端分离的开发方式,SSL证书一般加在前端站点上。但是使用https的站点会禁用http请求,这就要求所有的请求都必须是https协议的,也就是前端的调用、后端的接口提供都需要在代码中改成https形式。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值