自签颁发Nginx、Tomcat内网ip https证书

作者:IT技术圈子 浏览量:203   发表于 2024-10-08 17:37 标签:

免费自动申请和续期SSL证书的平台除了公网场景,有些特殊场景下,我们需要为内网IP配置https证书。今天介绍如何生成CA根证书和内网服务器证书,以及在不同系统中进行相关配置和部署的方法。

自签名证书的概念

自签名证书是指由用户自己生成和签名的证书,而不是由公认的证书颁发机构(如VeriSign、阿里云、腾讯云、Let's Encrypt)签名的证书。自签名证书是免费的,但通常不受浏览器和其他客户端的信任。

一、生成根证书的私钥和证书

  1. 生成CA根证书私钥
openssl genrsa -out ca.key 2048
  1. 使用私钥生成CA根证书
openssl req -x509 -new -nodes -key ca.key -sha256 -days 1024 -out ca.crt

操作过程中需要依次输入国家(如CN)、省份(如SHANGHAI)、城市(如SHANGHAI)、组织名称、组织代码、自签的证书IP或域名(如192.168.140.120)、邮箱等信息。

二、为内网IP(或域名)生成私钥和证书请求文件(CSR)

  1. 生成内外IP的私钥
openssl genrsa -out server.key 2048
  1. 使用私钥生成证书请求文件
openssl req -new -key server.key -out server.csr

这里填写的内容与生成CA根证书时一致(除了通用名称填写内网IP地址或域名),最后两行直接按回车即可。

三、创建证书扩展文件

  1. 创建一个名为v3.ext的文件,并添加以下内容:
authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment subjectAltName = @alt_names [alt_names]#这里IP替换成你的内网DNS服务器ipIP.1 = 10.*.*.*

四、使用CA的证书为内网IP(或域名)签名证书

  1. 使用命令:
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 500 -sha256 -extfile v3.ext

五、部署(Tomcat和Nginx)

  1. Nginx部署
  • 得到server.crt和server.key后,在nginx配置文件中添加以下内容:
server {       listen       443 ssl;       server_name  localhost;       #ssl证书路径       ssl_certificate ../../server.crt;       #私钥文件路径       ssl_certificate_key ../../server.key;       ssl_session_cache shared:SSL:1m;       ssl_session_timeout 5m;       ssl_ciphers HIGH:!aNULL:!MD5;       ssl_prefer_server_ciphers on;       location / {           root   html;           index  index.html index.htm;       }}
  1. Tomcat部署
  • A. 将证书导出成浏览器支持的.p12格式:
openssl pkcs12 -export -in server.crt -inkey server.pem -out server.p12

(需要输入一个密码)

  • B. 将.p12格式转换成jks证书:
keytool -importkeystore -srckeystore server.p12 -srcstoretype pkcs12 -destkeystore server.jks -deststoretype jks

(A步骤输入的密码和B步骤的要一致)

  • C. Tomcat 8部署,在配置文件中添加以下内容:
<Connector  port ="8443"  protocol ="org.apache.coyote.http11.Http11NioProtocol"  maxThreads ="150"  SSLEnabled ="true" >   <SSLHostConfig >       <Certificate  certificateKeystoreFile ="jks证书地址"  certificateKeystorePassword ="上述输入的密码"  type ="RSA"  />   </SSLHostConfig ></Connector >

六、客户端配置(可选)

客户端访问https的时候,如果想浏览器不带警告,需要将根证书即:ca.crt安装到本地的受信任目录中。

  • Windows(大多数人使用):双击ca.crt文件,点击安装证书,选择本地计算机,点击下一步,选择将所有证书都放入下列存储,点击浏览,选择受信任的根证书颁发机构,点击确定,点击完成。
  • Centos:
sudo cp ca.crt /etc/pki/ca-trust/source/anchors/`和`sudo update-ca-trust
  • Ubuntu:
sudo cp ca.crt /usr/local/share/ca-certificates/`和`sudo update-ca-certificates