自签颁发Nginx、Tomcat内网ip https证书
免费自动申请和续期SSL证书的平台除了公网场景,有些特殊场景下,我们需要为内网IP配置https证书。今天介绍如何生成CA根证书和内网服务器证书,以及在不同系统中进行相关配置和部署的方法。
自签名证书的概念
自签名证书是指由用户自己生成和签名的证书,而不是由公认的证书颁发机构(如VeriSign、阿里云、腾讯云、Let's Encrypt)签名的证书。自签名证书是免费的,但通常不受浏览器和其他客户端的信任。
一、生成根证书的私钥和证书
- 生成CA根证书私钥
openssl genrsa -out ca.key 2048
- 使用私钥生成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)
- 生成内外IP的私钥
openssl genrsa -out server.key 2048
- 使用私钥生成证书请求文件
openssl req -new -key server.key -out server.csr
这里填写的内容与生成CA根证书时一致(除了通用名称填写内网IP地址或域名),最后两行直接按回车即可。
三、创建证书扩展文件
- 创建一个名为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(或域名)签名证书
- 使用命令:
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 500 -sha256 -extfile v3.ext
五、部署(Tomcat和Nginx)
- 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; }}
- 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