使用OpenSSL创建自签名SSL证书

近期的工作中遇到了数据传输加密的需求,就是在数据传输安全层面都要求使用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
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
您可以按照以下步骤来为 Nginx 生成和使用签名证书: 1. 生成私钥:打开终端并执行以下命令生成一个私钥文件: ``` openssl genrsa -out private.key 2048 ``` 2. 生成证书请求:使用私钥文件生成证书请求(CSR)文件: ``` openssl req -new -key private.key -out csr.pem ``` 在生成过程中,您需要提供与证书相关的信息,例如域名和组织等。 3. 自签名证书使用私钥和证书请求文件生成自签名证书: ``` openssl x509 -req -days 365 -in csr.pem -signkey private.key -out certificate.crt ``` 这将生成一个有效期为 365 天的自签名证书。 4. 配置 Nginx:打开 Nginx 配置文件(通常在 `/etc/nginx/nginx.conf` 或 `/etc/nginx/conf.d/default.conf`)并添加以下内容: ``` server { listen 443 ssl; server_name your_domain.com; ssl_certificate /path/to/certificate.crt; ssl_certificate_key /path/to/private.key; # 其他 Nginx 配置项... } ``` 将 `your_domain.com` 替换为您的域名,并将 `/path/to/certificate.crt` 和 `/path/to/private.key` 替换为您生成的证书和私钥的路径。 5. 重启 Nginx:保存并关闭文件后,使用以下命令重启 Nginx: ``` sudo service nginx restart ``` 现在,您的 Nginx 服务器应该使用签名证书进行加密通信了。请注意,由于这是自签名证书,因此在访问该网站时会出现浏览器安全警告。要获得受信任的证书,您应该考虑使用受信任的证书颁发机构(CA)签署的证书

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值