IP地址自签名证书

创建CA (证书认证机构)

创建私钥

openssl genrsa -out ca.key 2048
  • genrsa 表示生成一个RSA私钥
  • -out ca.key 指定生成的私钥文件名为 ca.key,并将其输出到当前目录
  • 2048 RSA密钥的长度为2048位

创建公钥

openssl req -new -x509 -days 208 -key ca.key -out ca.crt
  • req 表示操作与证书签名请求(CSR)相关的部分
  • -new 生成一个新的证书签名请求(CSR)
  • -x509 生成一个自签名证书,而不是一个证书签名请求(CSR)
  • -days 208 证书的有效期为208天
  • -key ca.key 使用之前生成的私钥文件 ca.key
  • -out ca.crt 指定输出的证书文件名为 ca.crt

配置文件

openssl.cnf

OpenSSL 配置文件,用于生成证书签名请求(Certificate Signing Request,CSR)

[req]
# 指定请求中所用的主体部分名称配置段
distinguished_name = req_distinguished_name
# 在请求中使用的扩展配置段
req_extensions = v3_req

[req_distinguished_name]
# 国家名称字段(2个字母的代码)
countryName = Country Name (2 letter code)
# 国家名称字段的默认值为美国
countryName_default = US
# 州或省名称字段(全名)
stateOrProvinceName = State or Province Name (full name)
# 州或省名称字段的默认值为纽约州
stateOrProvinceName_default = NY
# 城市名称字段
localityName = Locality Name (eg, city)
# 城市名称字段的默认值为纽约市
localityName_default = NYC
# 组织单位名称字段
organizationalUnitName = Organizational Unit Name (eg, section)
# 组织单位名称字段的默认值为 'xxx'
organizationalUnitName_default = xxx
# 常用名称字段
commonName = xxx
# 常用名称字段的最大长度为64个字符
commonName_max = 64

[ v3_req ]
# 表示这是一个CA证书,可以用来签发其他证书
basicConstraints = CA:TRUE
# 定义密钥的用途,包括不可否认性、数字签名和密钥加密。
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
# 指定备用名称字段(例如IP地址),并引用 alt_names 段
subjectAltName = @alt_names

[alt_names]
# 备用IP地址1,值为192.168.0.10
IP.1 = 192.168.0.10
# 备用IP地址2,值为x.x.x.x(需要替换为实际IP地址)
IP.2 = x.x.x.x

v3.ext

OpenSSL 配置文件的一部分,用于定义证书扩展

# 标识颁发该证书的CA的密钥
## `keyid`:使用CA密钥的标识符
## `issuer`:使用颁发者的名称和序列号
authorityKeyIdentifier=keyid,issuer

# 定义证书的基本约束:这是一个终端用户证书,而不是CA证书,不能用来签发其他证书
basicConstraints=CA:FALSE

# 定义证书密钥的用途
## `digitalSignature`:用于验证数字签名
## `nonRepudiation`:确保签名者无法否认已签名的数据
## `keyEncipherment`:用于加密密钥数据
## `dataEncipherment`:用于加密数据
keyUsage=digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment

# 定义主题备用名称字段,包含备用名称的信息
## `@alt_names`:引用配置文件中名为 alt_names 的段落
subjectAltName=@alt_names

[alt_names]
# 备用IP地址1,值为192.168.0.10
IP.1 = 192.168.0.10
# 备用IP地址2,值为x.x.x.x(需要替换为实际IP地址)
IP.2 = x.x.x.x

生成签服务器证书

私钥

openssl genrsa -out server.key 2048

公钥

openssl req -new -days 208 -key server.key -out server.csr -config openssl.cnf

CA服务器签名

使用CA证书和私钥签署一个证书签名请求(CSR),生成一个新的证书

openssl x509 -days 208 -req -sha256 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt
  • -sha256 使用SHA-256哈希算法签名证书
  • -extfile v3.ext 指定包含扩展配置的文件 v3.ext
  • --CAcreateserial 生成并保存一个新的CA序列号文件
  • -in server.csr 指定要签署的证书签名请求(CSR)文件 server.csr
  • -out server.crt 指定输出的签署后的证书文件名为 server.crt
  • -CA ca.crt 使用CA证书 ca.crt 进行签名
  • -CAkey ca.key 使用CA私钥 ca.key 进行签名

部署nginx

server {
listen 443 ssl default_server;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;

location / {
proxy_redirect off;
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $http_host;
}
}