如何使用Tomcat原有server.jks证书为Consul配置HTTPS服务
从Tomcat的server.jks提取证书配置Consul HTTPS服务操作步骤
前置依赖
- 本地已安装JDK(包含
keytool命令行工具) - 本地已安装OpenSSL工具
证书提取操作
首先在终端进入server.jks所在目录,按顺序执行以下命令:
- 将JKS格式证书转换为OpenSSL可处理的PKCS12格式
keytool -importkeystore -srckeystore server.jks -srcstoretype JKS -deststoretype PKCS12 -destkeystore server.p12
执行时需要输入原server.jks的存储密码,同时按提示设置PKCS12文件的导出密码(后续步骤会用到)。
- 创建证书存放目录
mkdir -p cert
- 提取CA根证书(对应配置中
ca_file)
openssl pkcs12 -in server.p12 -cacerts -nokeys -out cert/ca.pem
输入上一步设置的PKCS12导出密码完成导出。
- 提取服务端公钥证书(对应配置中
cert_file)
openssl pkcs12 -in server.p12 -clcerts -nokeys -out cert/server.pem
- 提取服务端私钥(对应配置中
key_file)
openssl pkcs12 -in server.p12 -nocerts -nodes -out cert/serverkey.pem
参数-nodes表示不对私钥做加密存储,避免Consul启动时需要手动输入私钥密码。
- 验证证书与私钥匹配性(可选,推荐执行)
分别执行以下两条命令,输出的MD5值完全一致则说明证书和私钥匹配:
openssl x509 -noout -modulus -in cert/server.pem | openssl md5 openssl rsa -noout -modulus -in cert/serverkey.pem | openssl md5
Consul配置调整
在原server.conf配置中新增三个证书路径的顶级配置项,注意路径要和实际存放位置一致(原配置中key_file开头的斜杠代表根目录,如为相对路径需删除斜杠),调整后的完整配置如下:
{ "bootstrap": true, "server": true, "datacenter": "dc1", "data_dir": "data", "ca_file": "cert/ca.pem", "cert_file": "cert/server.pem", "key_file": "cert/serverkey.pem", "verify_incoming": true, "verify_outgoing": true, "verify_server_hostname": true, "auto_encrypt": { "allow_tls": true }, "log_level": "INFO", "enable_agent_tls_for_checks": true, "enable_syslog": false, "ui_config": { "enabled": true }, "ports": { "http": -1, "https": 8500 } }
权限配置与启动验证
- 配置证书权限,避免私钥权限过高引发启动报错
chmod 700 cert chmod 600 cert/serverkey.pem
注意需将证书目录和文件的所属用户调整为Consul服务的运行用户。
- 启动Consul服务
consul agent -config-file server.conf
- 验证HTTPS服务可用性
curl --cacert cert/ca.pem https://<Consul服务端IP/域名>:8500/v1/status/leader
正常返回集群leader地址则说明配置生效。
注意事项
- 需确保原Tomcat证书的SAN(使用者备用名称)字段包含Consul服务端的IP或域名,否则开启
verify_server_hostname参数后会出现主机名校验失败的错误。
内容的提问来源于stack exchange,提问作者jonas.lima
相关产品推荐
相关产品推荐

