HTTPS证书创建

一、环境准备

1.1 升级Openssl

https://blog.csdn.net/dougsu/article/details/131030752

二、认识证书请求CSR文件

在申请证书前需要创建CSR文件,将CSR文件上传到CA机构,由CA机构颁发数字证书

2.1 CSR 文件包含以下信息

1、关于企业和网站的信息 - 包括通用名称、组织、组织单位、城市/地区、州/县/地区 (S)、国家和电子邮件地址等信息
2、Public Key - 它包含在证书中,用于加密传输的数据,使用相应的私钥解密
3、关于密钥类型和长度的信息 - 这通常是 RSA 2048,但也可能有更大的尺寸,例如 RSA 4096+

2.2 CSR 文件详解

选项解释如下:

选项解释
国家或地区(Country,C)申请者所在的国家,用两位代表国家缩写的IS0国家代码表示。如:CN(中国),BR(巴西)
州或省份(State/Province,ST)申请者所在的州或省份的全名。如:'Beijing’或’Liao Ning
城市或地方(Locality,L)申请者所在的城市或地方的名称名称。如:'Beijing’或 ‘Dalian’
组织名称(OrganizationName,0)申请者所属的组织或公司的法定注册名称。它通常是包含诸如 Inc、Corp或LLC等后缀的完整公司名称。如:`Pinnacle Technologiesinc.
部门名称(Organizational Unit Name,OU)组织内的部门名称,通常指定为公司内部申请证书的部门。如:IT Department(I 部门)
域名信息(Common Name,CN)证书将被使用的域名或服务器的完全限定域名(Fuly Qualifed Domain Name,FQDN)。它可以是一个或多个,用于确定证书要被应用的网站或服务。例如`tls-example.com’
邮箱地址(Email Address,emailAddress)公司或申请者邮箱地址。如:‘admin@email.com’
公钥(Public Key)被包含在证书中的服务器的公钥文件,即将来客户端申请访间时将要获取到的公钥文件。、密钥长度:生成的公/私钥密钥长度,密钥越长,则越安全,但相应的速度也更慢。通常推荐使用2048位或更高(如4096位)的RSA密铜或ECC(椭圆曲线密码学)密钥,以保证安全性
签名算法指定在生成证书签名时使用的签名算法。其中SHA-256 是最为常见的算法

三、创建方式

3.1、在线创建

在这里插入图片描述

3.2、本地创建(推荐)

3.2.1 OpenSSl 命令
3.2.2 cfssl 命令

3.3 OpenSSl 命令创建

3.3.1 创建普通数字证书

3.3.1.1 创建PKI密钥
3.3.1.1.1 常用解密算法
算法应用
RSA目前最广泛使用的加密算法。
DSA由于安全原因已不在推荐使用。
ECDSA目前仍未被广泛所使用。
EdDSA目前仍未被广泛所使用。

密钥大小:用于指定密钥的大小,密钥越大则越安全,但相对地,加解密时间也越长。对于 RSA 加密算法来说,至少要确保密钥长度为 2048 位。
密钥密码:为创建的密钥指定一个密码,来进一步保护密钥的安全性。但同时也带来了一些密钥使用的复杂性。

常见创建PKI密钥方法:

  1. genpkey
  2. genrsa
3.3.1.1.2 使用genpkey方式创建
3.3.1.1.2.1创建秘钥文件private.pem
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out private.pem

选项解释如下:

选项解释
algorithm指定加密算法
pkeyopt指定选项,rsa_keygen_bits未秘钥长度
out指定秘钥文件名

在这里插入图片描述

3.3.1.1.2.2 以可读性的方式查看密钥文件
openssl pkey -in private.pem -text -noout -check

在这里插入图片描述

3.3.1.1.2.3 提取密钥文件中的公钥信息
# -pubout 参数为提取公钥
openssl pkey -in private.pem -pubout -out public.pem

# 查看公钥内容
cat public.pem

在这里插入图片描述

3.3.1.1.3 使用genrsa方式创建
3.3.1.1.3.1 创建秘钥文件private.pem
# 4096 指定秘钥长度
openssl genrsa -out private.pem 4096

# 查看该密钥文件
 cat private.pem

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/0ebbf889d9f34ee19d027a5e7d4370c4.png

3.3.1.1.3.2 以可读性的方式查看密钥文件
openssl rsa -in private.pem -text -noout -check

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/0eb8e8bf8c3a410192cf9b462493dcdd.png

3.3.1.1.3.3 提取密钥文件中的公钥信息
# -pubout 参数为提取公钥
openssl rsa -in private.pem -pubout -out public.pem

# 查看公钥内容
cat public.pem

在这里插入图片描述

3.3.1.2 创建CSR文件
3.3.1.2.1 以交互式创建csr文件
# new 创建一个新的csr文件
# key 指定秘钥文件
openssl req -new -key private.pem -out cert.csr

# 查看csr文件
cat cert.csr

在这里插入图片描述

3.3.1.2.2 以 -subj选项创建csr文件
# new 创建一个新的csr文件
# key 指定秘钥文件
openssl req -new -key private.pem -out cert.csr -subj "/C=CN/ST=SiChuan/L=Chengdu/O=TLS example/OU=IT/CN=tls-example.com/emailAddress=admin@email.com"
# 查看csr文件
cat cert.csr

在这里插入图片描述

3.3.1.2.3 以 配置文件创建csr文件
# 创建配置文件
vim cert.conf
# 编辑文件内容
[req]
default_bits       = 2048
distinguished_name = req_distinguish_name
req_extensions     = req_ext
prompt             = no

[req_distinguished_name]
C  = CN
ST = SiChuan
L  = Chengdu
O  = TLS example
OU = IT
CN = tls-example.com
emailAddress = admin@email.com

[req_ext]
subjectAltName = @alt_names

[alt_names]
DNS.1 = tls-example.com
DNS.2 = *.tls-example.com

# 创建csr文件
openssl req -new -key private.pem -out cert.csr -config cert.conf

# 查看csr文件
cat cert.csr

在这里插入图片描述在这里插入图片描述

3.3.1.2.4 可读性的方式查看csr文件
openssl req -in cert.csr -text -noout -verify

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/f3a23a89dad94c68a6bebc6420262b55.png

3.3.2 创建自签名证书(方式一)

3.3.2.1 创建密钥cert-key.pem和数字证书请求csr文件
openssl req -new -newkey rsa:2048 -keyout cert-key.pem -nodes - out cert.csr -subj "/C=CN/ST=SiChuan/L=ChengDu/O=TLS Technologies Inc./OU=IT/CN=tls-example.com/emailAddress=admin@email.com"

在这里插入图片描述

3.3.2.2 创建证书文件cert.crt
openssl x509  -req -days 365 -in cert.csr -sha256 -signkey cert-key.pem -extfile <(printf "subjectAltName=DNS:tls-example.com,DNS:*.tls-example.com") -out cert.crt

选项解释如下:

选项解释
x509 req使用创建好的csr文件创建证书,不指定则会以交互的形式让用户提供csr的主体信息创建证书
days证书的有效期
in指定创建证书时所使用的crs文件
sha256将使用hash 256算法来为证书进行签名
signkey为证书指定扩展属性
extfile为证书指定扩展属性
out证书的文件名

实操如下:
在这里插入图片描述

3.3.3 创建自建证书(方式二)

此方式不需要提前创建秘钥文件和csr文件

openssl req -x509  -newkey rsa:2048 -sha256 -days 3650 -nodes -keyout cert-key.pem  -subj "/C=CN/ST=SiChuan/L=ChengDu/O=TLS Technologies Inc./OU=IT/CN=tls-example.com/emailAddress=admin@email.com" -addext "subjectAltName=DNS:tls-example.com,DNS:*.tls-example.com,IP:127.0.0.1"  -out cert.crt

实操如下:
在这里插入图片描述

3.4 查看证书内容

cat cert.crt

在这里插入图片描述

## 以可读性展示文件内容
openssl x509 -in cert.crt -noout -text
选项解释
-noout不需要打印证书原始内容
-text以可读性展示

在这里插入图片描述
选项解释如下:

选项解释
版本号(Version)证书的版本信息
序列号(Serial Number)用于唯一标识证书的序列号
颁发者(lssuer)标识证书颁发机构(CA)的信息
有效期(Validity)指定证书的有效起始日期和截企古期
主体(Subject)描述证书申请者的信息
公钥信息(Subject Public Key Info)包括公钥及其算法
数字签名(Signature)由颁发机构使用其私钥生成的数字签名,用于验证证书的完整性和真实性
扩展信息(Fxtention)包含其他可选信息,如密钥用途,基本约束等

四、Nginx代理配置

4.1 配置Nginx配置文件

在当前目录创建tls-example-nginx.conf文件

server {
    listen       443 ssl;
    server_name  tls-example.com;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

   # 指定数字证书文件位置
   ssl_certificate "certs/cert.crt";
   # 指定数字证书密钥文件位置
   ssl_certificate_key "certs/cert-key.pem";
   ssl_session_cache shared:SSL:1m;
   ssl_session_timeout 10m;
   ssl_prefer_server_ciphers on;
}

在这里插入图片描述

4.2 创建docker容器

docker run --rm -d  -v $(pwd)/:/etc/nginx/certs -v $(pwd)/tls-example-nginx.conf:/etc/nginx/conf.d/tls-example-nginx.conf -p 443:443 --name tls nginx

说明:
将带有数字证书的目录挂载到nginx的certs目录,用于nginx配置文件读取数据,其中tls-example-nginx.conf同样需要挂载到nginx配置conf.d中
在这里插入图片描述

4.3 访问Web Https

https://192.168.130.100/

出现以下页面则是因为当前自建数字证书尚未通过浏览器验证,需要手动将自建证书进行系统信任
在这里插入图片描述
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/aba0ca98753e48a6b3e9916b86d8c886.png在这里插入图片描述
在这里插入图片描述

亦可手动继续访问:
在这里插入图片描述

  • 30
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在Linux上创建HTTPS证书,您可以按照以下步骤进行操作: 1. 安装必要的软件: 在终端中运行以下命令以安装OpenSSL软件包: ``` sudo apt-get update sudo apt-get install openssl ``` 2. 生成私钥: 使用以下命令生成一个私钥文件(例如,私钥文件名为`private.key`): ``` openssl genrsa -out private.key 2048 ``` 3. 创建证书签名请求(CSR): 使用以下命令生成一个CSR文件(例如,CSR文件名为`csr.pem`): ``` openssl req -new -key private.key -out csr.pem ``` 在运行上述命令后,您将被要求提供一些证书相关的信息,例如国家/地区、组织名称、域名等。请根据您的实际情况提供相关信息。 4. 自签名证书(可选): 如果您只是想创建一个自签名证书,而不是通过权威的证书颁发机构(CA)获取证书,可以使用以下命令生成一个自签名证书文件(例如,证书文件名为`certificate.crt`): ``` openssl x509 -req -days 365 -in csr.pem -signkey private.key -out certificate.crt ``` 请注意,自签名证书不会被所有客户端信任,因此在实际使用中可能会出现安全警告。 5. 通过CA获取证书(可选): 如果您希望获得由权威的证书颁发机构(CA)签发的证书,您需要向CA提交CSR文件,并按照其指示进行进一步的操作。CA通常会要求您进行域名验证和身份验证等步骤。 完成验证和审核后,您将收到由CA签发的证书文件。将该文件保存为`certificate.crt`。 请注意,上述步骤中生成的私钥和证书文件都应该妥善保管,并且私钥应该保持机密性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值