前言
由于学习的需要,配置了一台服务器,服务器通过BMC和ESXi进行管理。这两个系统都是使用了Web方式进行管理的,在看着地址栏里面的“不安全”提示时,总是很扎眼,因此不如自己给服务器签发一个SSL证书,实现“安全”的访问。
在之前配置SoftEther的时候,我曾经生成了一个自己的根CA证书,并且我的所有设备上都已经信任了这个证书,因此这次就使用这个证书来为服务器的SSL证书进行签名,这样就不需要重新调整证书信任设置。
转换证书格式
当初SoftEther生成的CA根证书我储存为了p12格式,需要先转换为标准的PEM格式:
openssl pkcs12 -in "Minaduki SSL CA.p12" -out "Minaduki SSL CA.key.pem" -nocerts -nodes
openssl pkcs12 -in "Minaduki SSL CA.p12" -out "Minaduki SSL CA.crt.pem" -clcerts -nokeys
转换完成后,获得了两个PEM文件,分别为证书和私钥的PEM。为p12文件设置的密码需要在转换时输入,转换完成后,私钥不再受到密码的保护。
为需要SSL的服务生成私钥和证书
签发证书的大致流程是:
- 生成一个私钥文件。
- 编写一个配置文件,配置文件包含了证书的基本信息。
- 根据私钥和配置文件,生成证书签名请求文件。
- 使用CA密钥对对CSR进行签名,生成证书文件。
生成私钥
生成私钥非常简单:
openssl genrsa -out bmc.key 4096
其中-out
参数指定输出文件,4096
为RSA密钥的长度。
撰写配置文件
撰写的配置文件用于生成证书签名请求,其中req_distinguished_name
中的项目会在生成CSR时交互式询问并记录在CSR中,而对应的default项目则会成为默认的输入。alt_names
则是为了能够使用IP地址直连时必须使用的拓展,在这里可以指定服务器可选的域名或者IP地址。
由于工位的路由器是一个非常古老的网件R6300v2,DHCP服务器不支持给客户端下发主机名(我也懒得另外去配置),因此主要时间都是使用IP进行访问的。
另外,似乎一些浏览器会要求证书的Common Name必须是一个FQDN的域名(看起来是也是),所以不能使用IP地址作为Common Name。
[ req ]
default_md = sha256
default_bits = 4096
distinguished_name = req_distinguished_name
req_extensions = req_ext
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = CN
stateOrProvinceName = State or Province Name
stateOrProvinceName_default = Jiangsu
localityName = Locality Name (eg, city)
localityName_default = Nanjing
organizationName = Organization Name (eg, company)
organizationName_default = Minaduki Technologies
commonName = Common Name (e.g. server FQDN or YOUR name)
commonName_max = 64
commonName_default = direct.bmc.gpu.minaduki.cn
[ req_ext ]
subjectAltName = @alt_names
[alt_names]
DNS = direct.bmc.gpu.minaduki.cn
IP = 192.168.3.114
根据配置文件生成证书签名请求
openssl req -new -key bmc.key -config bmc.conf -out bmc.csr
由于在配置文件里面已经写好了默认值,直接一路回车就行。
根据CSR签发证书
openssl x509 -req -days 1850 -CA Minaduki\ SSL\ CA.crt.pem -CAkey Minaduki\ SSL\ CA.key.pem -CAcreateserial -in bmc.csr -out bmc.cert -extensions req_ext -extfile bmc.conf
这样就成功签发了一个SSL证书。
将私钥和证书改下拓展名上传到BMC上,刷新网页,就可以看见新证书生效了。
根据已有的CSR生成证书
和BMC不同,ESXi不能自行上传私钥,只能先由ESXi生成CSR,然后再上传CSR对应的证书。
ESXi支持根据FQDN或者IP地址生成CSR,但是IP地址作为Common Name不可行,因此只能生成FQDN的CSR。
那么FQDN是什么呢——localhost.localdomain
。
因此在签发证书的时候,需要通过配置文件指定alt_names
,复制一份配置文件,仅修改其中alt_names
段如下:
[alt_names]
DNS = direct.esxi.gpu.minaduki.cn
IP = 192.168.3.115
其他未修改的字段是用于生成CSR的,因此不会影响证书的正常签发。
修改完成后再使用配置文件签发证书即可。
openssl x509 -req -days 1850 -CA Minaduki\ SSL\ CA.crt.pem -CAkey Minaduki\ SSL\ CA.key.pem -CAcreateserial -in esxi.csr -out esxi.cert -extensions req_ext -extfile esxi.conf
将证书复制到ESXi的对话框中,刷新页面,新证书就能正常生效了。
参考:
good
还有一个思路是给所有服务器配置域名,然后签LE或者ZeroSSL(误)就是需要在内网部署服务自动更新服务器上的证书
确实,域名是分配好了的,改天研究下怎么部署证书到这两个应用上。