---
title: 配置SSL加密相关证书
description: "为了确保OmniAdvisor参数调优功能与Spark History Server和PostgreSQL数据库之间的通信安全，建议启用SSL加密通信。默认情况下，通信已启用SSL加密，但仍需用户手动配置证书相关参数。"
url: https://www.hikunpeng.com/document/detail/zh/omniruntime/OmniAdvisor/kunpengbds_omniruntime_20_0552.html
sourcePath: /source/zh/omniruntime/OmniAdvisor/kunpengbds_omniruntime_20_0552.html
indexId: dbd2a4008b465a52061c5c90e6f3b9ba535d831e614649bc1345bee5f30ccde070
---
# 配置SSL加密相关证书

为了确保OmniAdvisor参数调优功能与Spark History Server和PostgreSQL数据库之间的通信安全，建议启用SSL加密通信。默认情况下，通信已启用SSL加密，但仍需用户手动配置证书相关参数。

以下是详细的配置步骤：

1. 请参考PostgreSQL的官方文档(https://www.postgresql.org/docs/12/ssl-tcp.html#SSL-CERTIFICATE-CREATION)生成SSL证书，确保安全通信。
2. 生成Spark History Server加密证书。
  以下是一个生成Spark History Server加密证书的脚本示例。请根据实际需求修改脚本中的SERVER_IP、CLIENT_IP以及各类路径变量参数，不可直接套用。

```
#!/bin/bash
# --------------------------------------------------
# Spark Mutual TLS (mTLS)双向认证证书生成脚本
# Spark Client和Spark History Server使用的证书由同一个自签名CA签发
# --------------------------------------------------
set -euo pipefail
# 设置变量
HOME_DIR="/home/omniadvisor_test/ssl"
CA_DIR="$HOME_DIR/spark-tls-ca"
CLIENT_DIR="$HOME_DIR/spark-client"
SERVER_DIR="$HOME_DIR/spark-history-server"
PKCS12_PASS="123456"
SERVER_IP="6.6.6.6"
CLIENT_IP="6.6.6.6"
CA_KEY="$CA_DIR/ca.key"
CA_CERT="$CA_DIR/ca.crt"
CLIENT_KEY="$CLIENT_DIR/spark-client.key"
CLIENT_CSR="$CLIENT_DIR/spark-client.csr"
CLIENT_CERT="$CLIENT_DIR/spark-client.crt"
CLIENT_P12="$CLIENT_DIR/spark-history-client.p12"
SERVER_KEY="$SERVER_DIR/spark-history-server.key"
SERVER_CSR="$SERVER_DIR/spark-history-server.csr"
SERVER_CERT="$SERVER_DIR/spark-history-server.crt"
SERVER_P12="$SERVER_DIR/spark-history-server.p12"
# 创建目录
mkdir -p "$CA_DIR" "$CLIENT_DIR" "$SERVER_DIR"
echo "[*] 正在生成CA(Certificate Authority)密钥和证书..."
# 生成 CA 私钥
openssl genrsa -out "$CA_KEY" 2048
# 5. 生成SAN扩展文件
cat > "$CA_DIR/san.ext" <<EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
IP.1 = $SERVER_IP
EOF
# 生成CA自签名证书（有效期10年）
openssl req -x509 -new -nodes -key "$CA_KEY" \
-sha256 -days 365 \
-out "$CA_CERT" \
-subj "/C=CN/ST=Beijing/L=Beijing/O=SparkInternal/OU=Dev/CN=$SERVER_IP"
echo "[✓] CA 已生成: $CA_KEY, $CA_CERT"
# ======================
# 为客户端生成证书
# ======================
echo "[*] 正在为Spark Client生成密钥和证书..."
# 生成客户端私钥
openssl genrsa -out "$CLIENT_KEY" 2048
# 生成客户端CSR
openssl req -new -key "$CLIENT_KEY" \
-out "$CLIENT_CSR" \
-subj "/C=CN/ST=Beijing/L=Beijing/O=SparkInternal/OU=Client/CN=$CLIENT_IP"
# 使用CA签发客户端证书（有效期1年）
openssl x509 -req -in "$CLIENT_CSR" \
-CA "$CA_CERT" -CAkey "$CA_KEY" -CAcreateserial \
-out "$CLIENT_CERT" -days 365 -sha256 \
-extfile "$CA_DIR/san.ext"
# 导出为p12格式
openssl pkcs12 -export \
-in $CLIENT_CERT \
-inkey $CLIENT_KEY \
-out $CLIENT_P12 \
-name myserver \
-password pass:$PKCS12_PASS
echo "[✓] Spark Client 证书已生成: $CLIENT_KEY, $CLIENT_CERT"
# ======================
# 为Spark History Server生成证书
# ======================
echo "[*] 正在为Spark History Server生成密钥和证书..."
# 生成服务端私钥
openssl genrsa -out "$SERVER_KEY" 2048
# 生成服务端 CSR
openssl req -new -key "$SERVER_KEY" \
-out "$SERVER_CSR" \
-subj "/C=CN/ST=Beijing/L=Beijing/O=SparkInternal/OU=Server/CN=$SERVER_IP"
# 使用CA签发服务端证书（有效期1年）
openssl x509 -req -in "$SERVER_CSR" \
-CA "$CA_CERT" -CAkey "$CA_KEY" -CAcreateserial \
-out "$SERVER_CERT" -days 365 -sha256 \
-extfile "$CA_DIR/san.ext"
# 导出为p12格式
openssl pkcs12 -export \
-in $SERVER_CERT \
-inkey $SERVER_KEY \
-out $SERVER_P12 \
-name myserver \
-password pass:$PKCS12_PASS
echo "[✓] Spark History Server证书已生成: $SERVER_KEY, $SERVER_CERT"
# ======================
# 输出总结
# ======================
echo ""
echo "=================================================="
echo " Spark mTLS双向认证证书生成完成"
echo "所有文件保存在当前目录下的子文件夹中："
echo ""
echo "CA (用于验证双方证书):"
echo "  - $CA_CERT     : CA公钥证书（需被client和server双方信任）"
echo "  - $CA_KEY      : CA私钥（请妥善保管）"
echo ""
echo "Spark Client:"
echo "  - $CLIENT_KEY  : 客户端私钥"
echo "  - $CLIENT_CERT : 客户端证书（由CA签发）"
echo ""
echo "Spark History Server:"
echo "  - $SERVER_KEY  : 服务端私钥"
echo "  - $SERVER_CERT : 服务端证书（由CA签发）"
echo ""
echo " 双向认证原理："
echo "  - Client会使用$CLIENT_CERT向Server证明自己的身份"
echo "  - Server会使用$SERVER_CERT向Client证明自己的身份"
echo "  - 双方都信任$CA_CERT（即CA是可信的根）"
echo ""
echo " 下一步：将这些证书配置到Spark Client和Spark History Server的SSL配置中。"
echo "    包括：spark.ssl.*, spark.history.ui.ssl.*, keyStore, trustStore等"
echo "=================================================="
```


3. 修改common_config.ini配置文件。

  a. 进入配置文件目录并打开配置文件。

```
cd $OMNIADVISOR_HOME/omniruntime-omniadvisor-2.0.0/config
vi common_config.ini
```


  b. 按“i”进入编辑模式，根据实际环境修改以下配置项。

```
[database]
# PostgreSQL后端数据库的SSL模式
postgresql.database.sslmode=verify-full
# PostgreSQL后端数据库的服务端CA根证书路径
postgresql.database.sslrootcert=/path/to/pg-sql/ca.crt
# PostgreSQL后端数据库的客户端证书路径
postgresql.database.sslcert=/path/to/pg-sql/client_postgres.crt
# PostgreSQL后端数据库的客户端私钥路径
postgresql.database.sslkey=/path/to/pg-sql/client_postgres.key
# PostgreSQL后端数据库的客户端私钥密码（若无密码可留空）
postgresql.database.sslpassword=
[spark]
# Spark History Server的URL（仅用于Rest模式）
spark.history.rest.url=https://<server1>:18480
# Spark History Server的SSL双向校验开关，默认开启（不可为空，必须配置）
spark.history.sslverify = true
# Spark History Server的SSL双向校验证书相关文件（仅在sslverify为True时生效）
spark.history.sslrootca =/path/to/spark-tls-ca/ca.crt
spark.history.sslcrt =/path/to/spark-client/spark-client.crt
spark.history.sslkey =/path/to/spark-client/spark-client.key
```


  c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
4. 配置Spark History Server。

  a. 打开“$SPARK_HOME/conf/spark-defaults.conf”文件。

```
vi $SPARK_HOME/conf/spark-defaults.conf
```


  b. 按“i”进入编辑模式，添加以下TLS相关配置。其中，spark.ssl.keyStore，spark.ssl.keyStorePassword，spark.ssl.keyPassword，spark.ssl.trustStore，spark.ssl.trustStorePassword请根据实际情况填写。

```
spark.ssl.historyServer.enabled         true
spark.ssl.protocol                      TLSv1.2
spark.ssl.keyStoreType                  PKCS12
spark.ssl.keyStore                      /path/to/spark-history-server.p12
spark.ssl.keyStorePassword              your_password
spark.ssl.keyPassword                   your_password
spark.ssl.trustStore            /path/to/spark-history-client.p12
spark.ssl.trustStorePassword    your_password
spark.ssl.needClientAuth        true
```


  c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
  d. 重启Spark History Server服务。
    在Spark的“sbin”目录下，使用如下命令停止和启动Spark History Server服务。

```
# 停止Spark History Server
sh $SPARK_HOME/sbin/stop-history-server.sh
# 启动Spark History Server
sh $SPARK_HOME/sbin/start-history-server.sh
```
