Shell指令碼實現生成SSL自簽署證書

零三鄧何芯桃379發表於2019-05-08

這篇文章主要介紹了Shell指令碼實現生成SSL自簽署證書,本文直接給出實現程式碼,程式碼中包含大量註釋,需要的朋友可以參考下

啟用 apache 的 mod_ssl 之後需要有證書才能正常運作。寫了個指令碼來操作。首先要確定機器上已經有 openssl 。

複製程式碼 程式碼如下:

#!/bin/sh


ssl 證書輸出的根目錄。

sslOutputRoot="/etc/apache_ssl"

if [ $# -eq 1 ]; then

sslOutputRoot=$1

fi

if [ ! -d ${sslOutputRoot} ]; then嬰兒起名

mkdir -p ${sslOutputRoot}

fi


cd ${sslOutputRoot}


echo “開始建立CA根證書…”


建立CA根證書,稍後用來簽署用於伺服器的證書。如果是透過商業性CA如

Verisign 或 Thawte 簽署證書,則不需要自己來建立根證書,而是應該

把後面生成的伺服器 csr 檔案內容貼入一個web表格,支付簽署費用並

等待簽署的證書。關於商業性CA的更多資訊請參見:

Verisign -

Thawte Consulting -

CertiSign Certificadora Digital Ltda. -

IKS GmbH - /

Uptime Commerce Ltd. -

BelSign NV/SA -

生成CA根證書私鑰

openssl genrsa -des3 -out ca.key 1024


生成CA根證書

根據提示填寫各個欄位, 但注意 Common Name 最好是有效根域名(如 zeali.net ),

並且不能和後來伺服器證書籤署請求檔案中填寫的 Common Name 完全一樣,否則會

導致證書生成的時候出現

error 18 at 0 depth lookup:self signed certificate 錯誤

openssl req -new -x509 -days 365 -key ca.key -out ca.crt

echo “CA根證書建立完畢。”


echo “開始生成伺服器證書籤署檔案及私鑰 …”


生成伺服器私鑰

openssl genrsa -des3 -out server.key 1024


生成伺服器證書籤署請求檔案, Common Name 最好填寫使用該證書的完整域名

(比如: security.zeali.net )

openssl req -new -key server.key -out server.csr

ls -altrh ${sslOutputRoot}/server.*

echo “伺服器證書籤署檔案及私鑰生成完畢。”


echo “開始使用CA根證書籤署伺服器證書籤署檔案 …”


簽署伺服器證書,生成server.crt檔案

參見 http://www.faqs.org/docs/securing/chap24sec195.html

sign.sh START

Sign a SSL Certificate Request (CSR)

Copyright © 1998-1999 Ralf S. Engelschall, All Rights Reserved.

CSR=server.csr


case $CSR in

*.csr ) CERT="echo $CSR | sed -e 's/\.csr/.crt/'" ;;


) CERT="$CSR.crt" ;;

esac

make sure environment exists

if [ ! -d ca.db.certs ]; then

mkdir ca.db.certs

fi

if [ ! -f ca.db.serial ]; then

echo ‘01’ >ca.db.serial

fi

if [ ! -f ca.db.index ]; then

cp /dev/null ca.db.index

fi


create an own SSLeay config

如果需要修改證書的有效期限,請修改下面的 default_days 引數.

當前設定為10年.

cat >ca.config <<EOT

[ ca ]

default_ca = CA_own


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69918221/viewspace-2643694/,如需轉載,請註明出處,否則將追究法律責任。

相關文章