openssl自簽名CA證書

原博客鏈接

本文非原創(chuàng),系瀏覽各博客后結(jié)合自身使用的一個(gè)總結(jié)皱碘,方便回顧。

前情提要

通俗理解SSL/TLS協(xié)議區(qū)別與原理
數(shù)字簽名是什么

什么是x509證書鏈

  • x509證書一般會(huì)用到三類文件,key鲸阻,csr玄呛,crt阅懦。
  • key是私用密鑰,openssl格式徘铝,通常是rsa算法耳胎。
  • csr是證書請(qǐng)求文件惯吕,用于申請(qǐng)證書。在制作csr文件的時(shí)候怕午,必須使用自己的私鑰來簽署申請(qǐng)混埠,還可以設(shè)定一個(gè)密鑰。
  • crt是CA認(rèn)證后的證書文件(windows下面的csr诗轻,其實(shí)是crt)钳宪,簽署人用自己的key給你簽署的憑證。

概念

  • 根證書 生成服務(wù)器證書扳炬,客戶端證書的基礎(chǔ)吏颖。自簽名。
  • 服務(wù)器證書 由根證書簽發(fā)恨樟。配置在服務(wù)器上半醉。
  • 客戶端證書 由根證書簽發(fā)。配置在服務(wù)器上劝术,并發(fā)送給客戶缩多,讓客戶安裝在瀏覽器里。

(把根證書安裝到瀏覽器的受信CA中养晋,訪問服務(wù)器時(shí)就不會(huì)出警告了衬吆。)

首先要有一個(gè)CA根證書,然后用CA根證書來簽發(fā)用戶證書绳泉。用戶進(jìn)行證書申請(qǐng):一般先生成一個(gè)私鑰逊抡,然后用私鑰生成證書請(qǐng)求(證書請(qǐng)求里應(yīng)含有公鑰信息),再利用證書服務(wù)器的CA根證書來簽發(fā)證書零酪。

步驟

自簽名CA根證書

1冒嫡、/root/ca目錄下創(chuàng)建4個(gè)子目錄:

  • newcerts:存放CA簽署過的數(shù)字證書。
  • private:存放CA的私鑰四苇。
  • conf:存放一些簡化參數(shù)用的配置文件孝凌。
  • server:存放服務(wù)器證書文件。

2月腋、制作ca.key 私鑰

openssl genrsa -out /root/ca/private/ca.key 2048

3蟀架、生成pem格式的根證書

openssl req -x509 -new -nodes \
-key /root/ca/private/ca.key \
-sha256 -days 1024 \
-out /root/ca/private/ca.pem

接下來提示將如下顯示:
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:GuangDong
Locality Name (eg, city) [Default City]:ShenZhen
Organization Name (eg, company) [Default Company Ltd]:Fatri
Organizational Unit Name (eg, section) []:Test
Common Name (eg, your name or your server's hostname) []:*.fatri.cn
Email Address []:a@fatri.cn

4、.pem轉(zhuǎn)化為.crt(用于瀏覽器信任)

openssl x509 -outform der -in /root/ca/private/ca.pem -out /root/ca/private/ca.crt

簽發(fā)服務(wù)器證書(客戶端證書同理)

1罗售、創(chuàng)建文件ca.conf

[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn

[dn]
C = CN
ST = GuangDong
L = ShenZhen
O = Fatri
OU = Test
emailAddress = a@fatri.cn
CN = *.fatri.cn

2辜窑、創(chuàng)建文件v3.ext

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = *.fatri.cn 
DNS.2 = localhost
IP.1 = 172.28.2.105
IP.2 = 172.28.2.107

3、生成服務(wù)端證書簽名請(qǐng)求寨躁,同時(shí)生成服務(wù)端私鑰(nginx用)

openssl req -new -sha256 -nodes \
-out /root/ca/server/server.csr \
-newkey rsa:2048 -keyout /root/ca/server/server.key \
-config /root/ca/conf/ca.cnf

4穆碎、用ca私鑰以ca的名義(ca.pem)給網(wǎng)站證書簽名,加上v3.ext中的配置

openssl x509 -req -in /root/ca/server/server.csr \
-CA /root/ca/private/ca.pem \
-CAkey /root/ca/private/ca.key \
-CAcreateserial -out /root/ca/server/server.crt -days 1800 -sha256 -extfile /root/ca/conf/v3.ext

至此證書生成完畢职恳!
接下來是使用流程所禀。

服務(wù)端Nginx配置SSL

1方面、啟動(dòng)Nginx容器

docker run -d --name nginx-test --restart always\  
-p 81:8080 -p 444:443 \ 
-v /usr/local/nginx/nginx.conf:/etc/nginx/nginx.conf:ro  \  
-v /root/ca:/root/ca \ 
nginx:1.17.3 

解釋:
-d:后臺(tái)運(yùn)行 --name:容器名 --restart:重啟設(shè)置
-p:端口映射(宿主機(jī)端口:容器內(nèi)端口)
-v:數(shù)據(jù)掛載(容器內(nèi)目錄掛載到宿主機(jī), ro將容器內(nèi)配置文件設(shè)為只讀模式, 只能在宿主機(jī)修改nginx配置)

2、打開防火墻端口81色徘、444

firewall-cmd --add-port 81/tcp --permanent --zone=public
firewall-cmd --add-port 444/tcp --permanent --zone=public
firewal-cmd --reload

3恭金、配置nginx.conf, 為了開發(fā)方便同時(shí)開啟了http和https的訪問,如果局域網(wǎng)統(tǒng)一配置了域名褂策,不需要更改主機(jī)host就可以關(guān)閉8080端口或者將其重定向至443横腿。

worker_processes  auto;

events {
   worker_connections  1024;
}

http {
   include             mime.types;
   default_type        application/octet-stream;
   sendfile            on;

   proxy_set_header X-Forward-For  $proxy_add_x_forwarded_for;
   # 請(qǐng)求主機(jī)頭字段,否則為服務(wù)器名稱
   proxy_set_header Host           $host;
   # 客戶端ip地址
   proxy_set_header X-Real-IP      $remote_addr;
   # 包含請(qǐng)求參數(shù)的原始URI斤寂,不包含主機(jī)名
   proxy_set_header Request-Url    $request_uri;

   # 配置共享會(huì)話緩存大小耿焊,視站點(diǎn)訪問情況設(shè)定
   ssl_session_cache   shared:SSL:10m;
   # 配置會(huì)話超時(shí)時(shí)間
   ssl_session_timeout 10m; 

   map $http_upgrade $connection_upgrade {
       default upgrade;
       ''      close;
   }

   upstream shadow {
       server 172.20.0.104:8080 weight=1;
   }
  
   upstream web {
       server 172.20.0.109:8080 weight=1;
   }

   server {
       listen       8080;
       listen       443 ssl;
       server_name *.fatri.cn;
       ssl_certificate /root/ca/server/server.crt;
       ssl_certificate_key /root/ca/server/server.key;

       # 設(shè)置長連接
       keepalive_timeout   70;
         
       # 以下兩項(xiàng)不建議顯示設(shè)定
       # ssl_protocols  SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2; 
       # 定義算法        
       # ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;         

       # 優(yōu)先采取服務(wù)器算法
       ssl_prefer_server_ciphers   on;

       location / {
           proxy_pass http://web;
       }
       location /api/v1/ws {
           proxy_pass http://shadow; 
           proxy_http_version 1.1;
           proxy_set_header Upgrade $http_upgrade;
           proxy_set_header Connection $connection_upgrade;
       }
   }
}

nginx重定向http請(qǐng)求配置(未測試)

server {
    listen 80;
    server_name *.fatri.cn;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name  example.org;
    root /etc/nginx/wwwroot/;
    charset utf-8;

    ssl_certificate /etc/nginx/ssl/example.org.bundle.crt;
    ssl_certificate_key /etc/nginx/ssl/example.org.key;
    
    # ...
}

4、修改Nginx配置文件nginx.conf, 修改后重啟容器使配置生效

docker restart nginx-test

由于不是買的官方CA證書遍搞,所以需要讓瀏覽器信任CA罗侯。

客戶端添加信任證書

雙擊根ca.crt導(dǎo)入證書(也可從控制面板搜索管理系統(tǒng)證書導(dǎo)入)

選擇受信任的根證書頒發(fā)機(jī)構(gòu)

配置主機(jī)映射

# 1、修改host
win10到C:\Windows\System32\drivers\etc目錄下修改host(可先用文本編輯保存到桌面溪猿,在修改后綴名拖回文件夾覆蓋原文件)
mac直接命令行`sodo vi /etc/hosts`

# 2钩杰、添加映射
172.28.2.105   dev.fatri.cn

# 3、刷新配置
win10還需進(jìn)入終端輸入`ipconfig/flushdns`刷新配置
mac應(yīng)該直接修改后就生效
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末诊县,一起剝皮案震驚了整個(gè)濱河市讲弄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌翎冲,老刑警劉巖垂睬,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異抗悍,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)钳枕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門缴渊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鱼炒,你說我怎么就攤上這事衔沼。” “怎么了昔瞧?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵指蚁,是天一觀的道長。 經(jīng)常有香客問我自晰,道長凝化,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任酬荞,我火速辦了婚禮搓劫,結(jié)果婚禮上瞧哟,老公的妹妹穿的比我還像新娘。我一直安慰自己枪向,他們只是感情好勤揩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著秘蛔,像睡著了一般陨亡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上深员,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天负蠕,我揣著相機(jī)與錄音,去河邊找鬼辨液。 笑死虐急,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的滔迈。 我是一名探鬼主播止吁,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼燎悍!你這毒婦竟也來了敬惦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤谈山,失蹤者是張志新(化名)和其女友劉穎俄删,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體奏路,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡畴椰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鸽粉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斜脂。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖触机,靈堂內(nèi)的尸體忽然破棺而出帚戳,到底是詐尸還是另有隱情,我是刑警寧澤儡首,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布片任,位于F島的核電站,受9級(jí)特大地震影響蔬胯,放射性物質(zhì)發(fā)生泄漏对供。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一笔宿、第九天 我趴在偏房一處隱蔽的房頂上張望犁钟。 院中可真熱鬧棱诱,春花似錦、人聲如沸涝动。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽醋粟。三九已至靡菇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間米愿,已是汗流浹背厦凤。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留育苟,地道東北人较鼓。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像违柏,于是被迫代替她去往敵國和親博烂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 【上一篇:openssl 自簽名證書 - 安裝openssl(一)】 事前準(zhǔn)備 相關(guān):pem漱竖、key:私鑰文件禽篱,對(duì)...
    碼摻和_夏尼閱讀 8,045評(píng)論 0 5
  • 寫這篇文章的起因是遇到了需要本機(jī)配置支持HTTPS協(xié)議的情況。 我們知道馍惹,因?yàn)镠TTPS的安全性躺率,越來越多的網(wǎng)絡(luò)應(yīng)...
    Jason_M_Ho閱讀 13,051評(píng)論 1 8
  • 1 概述 本文之所以稱之為半自動(dòng)化,是因?yàn)樽C書的申請(qǐng)并非日常工作万矾,只是一段時(shí)間才需要申請(qǐng)悼吱,同時(shí),在創(chuàng)建證書和辦法證...
    ghbsunny閱讀 2,158評(píng)論 0 1
  • 證書的三個(gè)作用 加密通信和身份驗(yàn)證(驗(yàn)證對(duì)方確實(shí)是對(duì)方聲稱的對(duì)象)和數(shù)據(jù)完整性(無法被修改良狈,修改了會(huì)被知) 證...
    SuperRoot閱讀 12,245評(píng)論 1 11
  • 負(fù)面情緒對(duì)別人的影響:好的氣氛可以感染隊(duì)友舆绎,但是消極的情緒也很影響大家的心情。 一個(gè)人要是心情不好们颜,或多或少都會(huì)表...
    靳艷敏閱讀 161評(píng)論 0 0