最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux Bash腳本自動創(chuàng)建keystore和生成公鑰方式

 更新時間:2025年11月11日 09:23:45   作者:fengyehongWorld  
該文章介紹了如何使用Bash腳本自動化生成新的keystore文件并提取公鑰的過程,腳本通過獲取腳本絕對路徑、使用關(guān)聯(lián)數(shù)組和函數(shù)傳遞數(shù)組參數(shù)等方法來實現(xiàn)自動化,并且可以在Windows上使用Git Bash運行

一、需求

現(xiàn)場有一個項目中使用了keystore證明書,現(xiàn)要求每年都需要生成一個新的keystore文件,并且根據(jù)keystore文件中的私鑰生成公鑰,然后將公鑰提供給其他項目使用。

  • 生成keystore文件的命令很長,手動通過命令行輸入不僅繁瑣,而且很容易出錯,因此要求寫一個腳本實現(xiàn)
  • 要求使用Bash腳本書寫,書寫完畢之后,如果在windows上安裝了Git for Bash的話,還可以在直接在windows上執(zhí)行。

二、腳本實現(xiàn)

#!/usr/bin/env bash

# 判斷keytool命令是否被安裝
if ! command -v keytool >/dev/null 2>&1; then
    echo "【keytool】命令并沒有被安裝, 請確認(rèn)!"
    exit 1
fi

# 判斷openssl命令是否被安裝
if ! command -v openssl >/dev/null 2>&1; then
    echo "【openssl】命令并沒有被安裝, 請確認(rèn)!"
    exit 1
fi

# 獲取當(dāng)前腳本的絕對路徑
SCRIPT_PATH="$(readlink -f "${BASH_SOURCE[0]}")"
# 根據(jù)腳本的絕對路徑獲取腳本所在目錄的絕對路徑
SCRIPT_DIR="$(dirname "$SCRIPT_PATH")"

# 私鑰別名
ALIAS='alias'
# 密碼
PASSWD='nosecret'
# 不帶后綴的文件名
FILE_NAME='test_mpl_ws_api'
# pem公鑰所對應(yīng)的key名稱
PEM_PUBLIC_KEY='PEM_PUBLIC_KEY_PATH'
# 組織信息
DNAME_INFO='CN=KDDI, OU=IT, O=MyCompany, L=Tokyo, ST=Tokyo, C=JP'

# 創(chuàng)建一個關(guān)聯(lián)數(shù)組, 關(guān)聯(lián)數(shù)組中的key和value都可以使用變量
declare -A filePathMap=(
    # keystore文件的絕對路徑
    [KEYSTORE_FILE_PATH]="$SCRIPT_DIR/${FILE_NAME}.keystore"
    # cer公鑰文件的所在路徑
    [CER_PUBLIC_KEY_PATH]="$SCRIPT_DIR/${FILE_NAME}.cer"
    # pem公鑰文件的所在路徑
    ["$PEM_PUBLIC_KEY"]="$SCRIPT_DIR/${FILE_NAME}.pem"
)

# 進(jìn)入當(dāng)前腳本所在的目錄
pushd "$SCRIPT_DIR" >/dev/null || exit 1

# 生成一個keystore文件
keytool -genkeypair \
-alias "$ALIAS" \
-keyalg RSA \
-sigalg SHA384withRSA \
-keysize 2048 \
-validity 365 \
-keystore "${filePathMap['KEYSTORE_FILE_PATH']}" \
-dname "$DNAME_INFO" \
-storepass "$PASSWD" \
-keypass "$PASSWD"

# 根據(jù)keystore文件中的私鑰生成cer格式的公鑰
keytool -exportcert \
-alias "$ALIAS" \
-keystore "${filePathMap['KEYSTORE_FILE_PATH']}" \
-storepass "$PASSWD" \
-file "${filePathMap['CER_PUBLIC_KEY_PATH']}"

# 通過openssl命令將der格式的公鑰轉(zhuǎn)換為pem格式的公鑰
openssl x509 \
-inform der \
-in "${filePathMap['CER_PUBLIC_KEY_PATH']}" \
-outform pem \
-out "${filePathMap["$PEM_PUBLIC_KEY"]}"

# 定義一個刪除文件的函數(shù)
function cleanup_files() {

    local -n pathMap=$1

    # 遍歷引入的map
    for pathKey in "${!pathMap[@]}"; do
        # local的局部變量只能在函數(shù)內(nèi)部使用
        local file_path="${pathMap[$pathKey]}"
        # 如果文件存在的話, 就刪除
        [[ -f "$file_path" ]] && rm -- "$file_path"
    done
}

# 刪除生成的文件
sleep 5
# 調(diào)用自定義的函數(shù), 傳入關(guān)聯(lián)數(shù)組, 刪除文件
cleanup_files filePathMap

# 返回到原目錄
popd >/dev/null

read -p "→ 腳本執(zhí)行結(jié)束, 按任意鍵結(jié)束 . . . " -n1 -s

三、腳本重點語法解析

獲取當(dāng)前腳本絕對路徑和腳本所在的文件夾

# 獲取當(dāng)前腳本的絕對路徑
SCRIPT_PATH="$(readlink -f "${BASH_SOURCE[0]}")"
# 根據(jù)腳本的絕對路徑獲取腳本所在目錄的絕對路徑
SCRIPT_DIR="$(dirname "$SCRIPT_PATH")"

Bash中雖然沒有Map,但是Bash中的關(guān)聯(lián)數(shù)組的特性和map類似

declare -A filePathMap=(
    # keystore文件的絕對路徑
    [KEYSTORE_FILE_PATH]="$SCRIPT_DIR/${FILE_NAME}.keystore"
    # cer公鑰文件的所在路徑
    [CER_PUBLIC_KEY_PATH]="$SCRIPT_DIR/${FILE_NAME}.cer"
    # pem公鑰文件的所在路徑
    ["$PEM_PUBLIC_KEY"]="$SCRIPT_DIR/${FILE_NAME}.pem"
)

調(diào)用函數(shù),傳遞關(guān)聯(lián)數(shù)組

  • Bash 沒法直接傳關(guān)聯(lián)數(shù)組,但你可以把數(shù)組名傳進(jìn)去,用 declare -n(Bash 4.3+)引用,Bash 4.3之前的舊版本的Bash并不支持。
  • -n 表示 nameref 引用。函數(shù)內(nèi)部用 local -n pathMap=$1,引用只是局部的別名,原數(shù)組本身在外部仍然存在,不會意外覆蓋或污染全局變量。
  • 函數(shù)結(jié)束后,局部變量的pathMap作用域消失,不影響其他變量。
function cleanup_files() {

    local -n pathMap=$1

    # 遍歷引入的map
    for pathKey in "${!pathMap[@]}"; do
        # local的局部變量只能在函數(shù)內(nèi)部使用
        local file_path="${pathMap[$pathKey]}"
        # 如果文件存在的話, 就刪除
        [[ -f "$file_path" ]] && rm -- "$file_path"
    done
}

# 調(diào)用自定義的函數(shù), 傳入關(guān)聯(lián)數(shù)組, 刪除文件
cleanup_files filePathMap

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Linux賬號文件控制管理步驟詳解

    Linux賬號文件控制管理步驟詳解

    在本篇文章里小編給大家整理了關(guān)于Linux賬號文件控制管理的步驟和實例,需要的朋友們可以參考下。
    2019-08-08
  • linux利用CSF防火墻屏蔽惡意請求

    linux利用CSF防火墻屏蔽惡意請求

    本篇文章主要介紹了linux利用CSF防火墻屏蔽惡意請求,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Apache設(shè)置目錄禁止訪問

    Apache設(shè)置目錄禁止訪問

    這篇文章主要介紹了如何在Apache中設(shè)置目錄禁止訪問,非常的簡單實用,有需要的朋友可以參考下
    2014-11-11
  • Shell 數(shù)組與關(guān)聯(lián)數(shù)組詳解及實例代碼

    Shell 數(shù)組與關(guān)聯(lián)數(shù)組詳解及實例代碼

    這篇文章主要介紹了 Shell 數(shù)組與關(guān)聯(lián)數(shù)組詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • linux ssh端口轉(zhuǎn)發(fā)的三種方式

    linux ssh端口轉(zhuǎn)發(fā)的三種方式

    這篇文章主要介紹了linux ssh端口轉(zhuǎn)發(fā)的三種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 詳解Linux文件中的數(shù)據(jù)是如何被寫進(jìn)磁盤

    詳解Linux文件中的數(shù)據(jù)是如何被寫進(jìn)磁盤

    Linux 中,我們的每一個進(jìn)程,打開的每一個文件都要有自己的 struct inode 對象和自己的文件頁緩沖區(qū)(就是所謂的內(nèi)核緩沖區(qū)),本文我們給大家介紹了Linux文件中的數(shù)據(jù)是如何被寫進(jìn)磁盤,需要的朋友可以參考下
    2024-05-05
  • centos 6.X升級ffmpeg包步驟詳解

    centos 6.X升級ffmpeg包步驟詳解

    眾所周知FFmpeg是一個開源免費跨平臺的視頻和音頻流方案,屬于自由軟件,采用LGPL或GPL許可證(依據(jù)你選擇的組件)。之前公司已經(jīng)安裝了ffmpeg包,但因為時間較久,所以最近打算升級下,所以這篇文章就記錄了在centos 6.X升級ffmpeg包的詳細(xì)步驟,下面來一起看看吧。
    2016-11-11
  • 如何實現(xiàn)為Ubuntu擴(kuò)容(添加新的硬盤空間)

    如何實現(xiàn)為Ubuntu擴(kuò)容(添加新的硬盤空間)

    這篇文章主要介紹了如何實現(xiàn)為Ubuntu擴(kuò)容(添加新的硬盤空間)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Linux CentOS6.6系統(tǒng)中安裝mysql源碼包的方法

    Linux CentOS6.6系統(tǒng)中安裝mysql源碼包的方法

    Linux系統(tǒng)中如何安裝mysql的源碼包呢?這里以CentOS6.6系統(tǒng)中安裝MySQL的源碼包,進(jìn)行講解。本文分步驟給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2016-10-10
  • VMnet8模式虛擬機(jī)配置全過程

    VMnet8模式虛擬機(jī)配置全過程

    文章介紹了如何配置虛擬網(wǎng)關(guān)以實現(xiàn)不同網(wǎng)絡(luò)之間的互連,包括前置知識網(wǎng)關(guān)的基本概念、虛擬機(jī)配置虛擬網(wǎng)關(guān)的步驟以及主機(jī)配置虛擬網(wǎng)關(guān)的方法
    2024-11-11

最新評論

华容县| 汝城县| 黄龙县| 黄梅县| 秀山| 富裕县| 宁乡县| 新津县| 邵东县| 太和县| 大洼县| 巴林右旗| 柏乡县| 石狮市| 苏尼特右旗| 益阳市| 潞西市| 小金县| 柏乡县| 巴彦淖尔市| 通化县| 稻城县| 宜都市| 盐池县| 五莲县| 永川市| 正镶白旗| 白沙| 雅安市| 姚安县| 清涧县| 金门县| 凉城县| 星座| 建始县| 嘉鱼县| 北川| 浦北县| 滨海县| 宕昌县| 濮阳市|