HTTPS - 自認證根證書CA生成/簽發(fā)/發(fā)布

即使是非對稱加密系統(tǒng),也不能保證公鑰的分發(fā)是可靠的. 為了防范公鑰分發(fā)過程中的中間人攻擊,需要一個可信的"始祖"公證人,這就是CA機構存在的意義.

由CA簽發(fā)證書認證網站的過程

  1. CA機構生成密鑰對: 公鑰 ca.cer 和 私鑰 ca.key
  2. 瀏覽器/操作系統(tǒng)攜帶證書ca.cer
  3. 網站生成私鑰 cert.key
  4. 網站將公鑰及網站信息(域名/組織等),提交給CA機構
  5. CA機構使用私鑰ca.key簽發(fā)網站證書cert.cer
  6. 網站運營商通過cert.key和 cert.cer運行https
  7. 用戶訪問網站,獲得cert.cer,由于該證書使用CA機構的私鑰簽發(fā),因此可以通過保存在本地的公鑰ca.cer驗證
  8. 驗證通過并得到了公鑰-> 顯示綠色https標志; 否則,提示用戶風險信息
  9. 用戶通過公鑰與網站服務器交換對稱加密密鑰,進行正式的SSL會話

通過上述步驟可以看出,只要能保證網站公鑰的可靠性即可,所以如果客戶端直接存放了網站的證書,那么也是可以保證https正常進行的.
但是無論是何種證書,都需要可靠的分發(fā)到客戶端才能保證安全.在開發(fā)過程中我們可能有各種各樣的服務端,相較于為每一個服務端向客戶端分發(fā)證書,還不如直接分發(fā)根證書,這樣只需一次分發(fā),客戶端就可以完成后續(xù)的簽發(fā)過程.

自認證CA根證書生成及簽發(fā)

證書生成過程可以通過openssl完成.為了簡化操作,我寫了一個shell腳本,只需兩步即可生成根證書及使用根證書簽發(fā)網站證書
保存以下代碼為gen_crt.sh,然后按照幫助內容使用即可.

  1. 生成根證書
    ./gen_crt.sh root aes128 2048 365 "/CN=MyCA"

    此時目錄下有ca.key及ca.cer兩個文件,ca.cer需要發(fā)布到客戶端
    為了保證私鑰的安全,生成過程中需要一個對ca.key加密的密碼

  2. 簽發(fā)網站證書
    ./gen_crt.sh sign aes128 2048 365 "/CN=www.mysite.com" ca.key ca.cer

為了保證私鑰的安全,生成過程中需要一個對cert.key加密的密碼.

    #!/bin/sh

    help()
    {
        echo "Example: ./gen_crt.sh root aes128 2048 365 \"/CN=CustomCA\""
        echo "Example: ./gen_crt.sh sign aes128 2048 365 \"/CN=www.mysite.com\" ca.key ca.cer"
        echo "key_length: 1024|2048|4096"
        methods="aes128|aes192|aes256|camellia128|camellia192|camellia256|des|des3|idea"
        echo "Supported encryption methods:" $methods
        exit 1
    }

    operation=$1
    method=$2
    key_length=$3
    expire_days=$4
    subj=$5
    ca_key=$6
    ca_cer=$7

    RED="\033[0;31m"
    GREEN="\033[0;32m"
    NC="\033[0m"


    if [ "$operation" = "root" ];then
        if [ $# -ne 5 ];then
            echo "${RED}Invalid argument num:$#${NC}"
            help
        fi
    elif [ "$operation" = "sign" ];then
        if [ $# -ne 7 ];then
            echo "${RED}Invalid argument num:$#${NC}"
            help
        fi
    else
        echo "${RED}Invalid operation $operation${NC}"
        help
    fi

    echo "Operation" $operation

    case $method in
        aes128|aes192|aes256|camellia128|camellia192|camellia256|des|des3|idea)
            echo "Using cryption method:" $method
            ;;
        *)
            echo "Wrong parameters"
            help
            ;;
    esac

    case $key_length in
        1024|2048|4096)
            echo "RSA Key length:" $key_length
            ;;
        *)
            echo "Wrong RSA key length"
            help
            ;;
    esac

    if [$expire_days -lt 0]; then
        echo "Invalid expire days:" $expire_days
        help
    fi

    if [ "$operation" = "root" ];then
        echo "Creating Root CA..."
        openssl genrsa -$method -out ca.key $key_length
        openssl req -x509 -new -key ca.key -out ca.cer -days 750 -subj $subj
        echo "${GREEN}Please distribute ca.cer anywhere needed"
        echo "${RED}Please keep ca.key in a private place${NC}"
    elif [ "$operation" = "sign" ];then
        openssl genrsa -$method -out cert.key $key_length
        openssl req -new -out cert.req -key cert.key -subj $subj
        openssl x509 -req -in cert.req -out cert.cer -CAkey $ca_key -CA $ca_cer -days $expire_days -CAcreateserial
        -CAserial serial
        echo "${GREEN}Please distribute cert.cer freely"
        echo "${RED}Please keep cert.key privately${NC}"
    else
        echo "Unknown operation: $operation"
        help
    fi

在nginx中使用證書

修改nginx配置文件 /etc/nginx/sites-available/xxxx
加入形如以下配置:

listen 443 ssl default_server;
listen [::]:443 ssl default_server;

ssl_certificate /home/ethan/workspace/homesite/tools/cert.cer;
ssl_certificate_key /home/ethan/workspace/homesite/tools/cert.key;

分發(fā)CA根證書

分發(fā)安全

可以通過可靠的服務(如通過安全驗證的郵箱服務提供商、存儲下載提供商)將根證書發(fā)放給客戶端队丝。直接通過http鏈接發(fā)放給客戶端(如12306)的方式是不安全的蔫缸,僅限于實驗環(huán)境使用

Linux分發(fā)(SSH/Python的HTTPS訪問等)

瀏覽器中分發(fā)

Chrome:設置->高級設置->HTTPS/SSL "管理證書"
Firefox: Preferences->Advanced->View Certificates->Certificate Manager

iOS分發(fā)

待進一步研究

Android分發(fā)

待進一步研究

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件朱监,死亡現場離奇詭異,居然都是意外死亡原叮,警方通過查閱死者的電腦和手機赫编,發(fā)現死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奋隶,“玉大人擂送,你說我怎么就攤上這事∥ㄐ溃” “怎么了嘹吨?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長境氢。 經常有香客問我蟀拷,道長,這世上最難降的妖魔是什么萍聊? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任问芬,我火速辦了婚禮,結果婚禮上脐区,老公的妹妹穿的比我還像新娘愈诚。我一直安慰自己,他們只是感情好牛隅,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著酌泰,像睡著了一般媒佣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上陵刹,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天默伍,我揣著相機與錄音,去河邊找鬼衰琐。 笑死也糊,一個胖子當著我的面吹牛,可吹牛的內容都是我干的羡宙。 我是一名探鬼主播狸剃,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼狗热!你這毒婦竟也來了钞馁?” 一聲冷哼從身側響起虑省,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎僧凰,沒想到半個月后探颈,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡训措,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年伪节,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绩鸣。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡劣欢,死狀恐怖蟀给,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤丧叽,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站蚤假,受9級特大地震影響溉仑,放射性物質發(fā)生泄漏。R本人自食惡果不足惜局服,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一钓瞭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧淫奔,春花似錦山涡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至唐责,卻和暖如春鳞溉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鼠哥。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工熟菲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人朴恳。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓抄罕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親于颖。 傳聞我的和親對象是個殘疾皇子呆贿,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內容

  • HTTPS介紹 超文本傳輸安全協議(英語:Hypertext Transfer Protocol Secure,縮...
    齊滇大圣閱讀 8,927評論 8 96
  • 數字證書就是網絡通訊中標志通訊各方身份信息的一系列數據恍飘,其作用類似于現實生活中的身份證榨崩。它是由一個權威機構發(fā)行的谴垫,...
    拉肚閱讀 21,139評論 1 17
  • 證書的三個作用 加密通信和身份驗證(驗證對方確實是對方聲稱的對象)和數據完整性(無法被修改,修改了會被知) 證...
    SuperRoot閱讀 12,242評論 1 11
  • java的環(huán)境搭配主要是JDK和eclipse母蛛,其實說難不難翩剪,我都是從百度搜索下載的,JDK下載的時候版本到沒怎么...
    小豪1閱讀 288評論 0 1
  • “用你的笑容去改變這個世界彩郊,別讓這個世界改變了你的笑容” 這句話讓我想到我們的一個病人 一個積極樂觀勇敢和癌癥作斗...
    一1人木閱讀 1,283評論 0 0