局域網https自簽名教程

們的客戶是在內網環境里面,所以就只能用自簽名證書來搞,我一想這還不容易,就迅速的百度了一下隨便找了個文章開始照貓畫虎,很快就弄完了,但是弄完后發現還是有問題,而且https 還是報不安全,

1、基于nginx版本
1、證書生成

生成密鑰,采用的是des3算法

openssl genrsa -des3 -out server.key 2048

根據密鑰簽發申請文件CSR

openssl req -new -key server.key -out server.csr
#這一步主要是去除密鑰的密碼,便于后續部署
openssl rsa -in server.key -out server.key 
#生成自簽名根證書并設置證書的有效期,crt是發給客戶端的證書
openssl x509 -req -days 3650 -in server.csr -signkey server.key  -out server.crt
#有的需要pem的證書,對證書做的轉換
openssl x509 -in server.crt -out server.pem -outform PEM 

2、配置Nginx

server {listen 8080 ssl; #端口增加SSL支持server_name _;charset utf-8;# ssl on;ssl_certificate /data/app/nginx/nginx/cert/server.crt;# 證書文件ssl_certificate_key /data/app/nginx/nginx/cert/server.key; #私鑰文件# access_log ./logs/access_stream.log main;# error_log ./logs/error_stream.log;location / {root /home/nginx/knowledge2.0/;index index.html;}error_page 500 502 503 504  /50x.html;location = /50x.html {root html;}
}

3、瀏覽器訪問
使用https協議訪問8080端口,但是會提示證書不可信,后面我們會詳細講解怎樣解決這個問題。

對于瀏覽器提示證書不可信,由于采用的自簽名證書,瀏覽器是沒有我們的自簽名證書導致。

4、證書不可信解決方案
生成證書時候增加ext.ini

extendedKeyUsage = serverAuth, clientAuth
basicConstraints = CA:FALSE
keyUsage = nonRepudiation,digitalSignature,keyEncipherment
subjectAltName = @alt_names[alt_names]
IP.1=172.1.0.1
DNS.1=www.test.com

然后重新使用Openssl重新生成證書,上述配置說明該證書是IP或者域名所有的:

openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt -extfile ext.ini
生成證書,然后導出crt證書,在windows下加入到信任的根證書下面,再次訪問瀏覽器,瀏覽器訪問不會報錯
二、基于域名的https

證書相關文件格式說明
.key: 私鑰文件
.pem: 根證書公鑰
.crt: 域名證書公鑰

自簽名文件的生成過程
這里用的工具是openssl,怎么安裝可以自行查一下

普通域名的自簽名
我們以域名 td.todocoder.com為例

創建證書目錄:/root/cert,進入/root/cert 創建 rootCA.key
$ openssl genrsa -des3 -out rootCA.key 2048
使用生成的密鑰(rootCA.key)來創建新的根SSL證書。并將其保存為rootCA.pem,證書有效期為10年
$ openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 3650 -out rootCA.pem

輸入第一步設置的密碼

Enter pass phrase for rootCA.key:
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Zhengzhou
Locality Name (eg, city) []:Zhengzhou
Organization Name (eg, company) [Internet Widgits Pty Ltd]:todocoderCA
Organizational Unit Name (eg, section) []:todocoderCA
Common Name (e.g. server FQDN or YOUR name) []:RootTodoCoder Cert
Email Address []:todocoder@github.com

這一行是把pem 轉換成 crt格式

$ openssl x509 -outform der -in rootCA.pem -out rootCA.crt
提示填寫的字段大多都可以直接回車過就行了,只要Common Name字段需要填寫內容,這是生成跟證書后導入到系統的證書名稱,我填的是RootTodoCoder Cert創建生成域名ssl證書的前置文件
在這里我生成一個 td.todocoder.com 的域名證書。創建一個td.ext文件,以創建一個X509 v3證書。注意我們指定了subjectAltName選項。cat >> td.ext <<EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage=digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName=@alt_names[alt_names]
DNS.1 = td.todocoder.com
EOF
這里的 [alt_names] 域中即為我們需要指定的 subjectAltName,可以配置多個 IP,DNS 或其他值。生成域名ssl證書秘鑰(tdtodocoder.csr、tdtodocoder.key)
$ openssl req -new -sha256 -nodes -out tdtodocoder.csr -newkey rsa:2048 -keyout tdtodocoder.keyCountry Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Zhengzhou
Locality Name (eg, city) []:Zhengzhou
Organization Name (eg, company) [Internet Widgits Pty Ltd]:todocoder
Organizational Unit Name (eg, section) []:todocoder
Common Name (e.g. server FQDN or YOUR name) []:td.todocoder.com
Email Address []:todocoder@github.com
A challenge password []:rootCA
An optional company name []:todocoder

這一步填寫域名證書密鑰需要的信息,會展示在瀏覽器的域名證書信息,其中最重要的是Common Name的內容,必須是對應需要https訪問的域名的。

通過我們之前創建的根SSL證書頒發,創建出一個 test.testcloudide.com 的域名證書。輸出是一個名為的證書文件ttestcloudide.crt(對應位置替換為自己的文件路徑)

$ openssl x509 -req -in tdtodocoder.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out tdtodocoder.crt -days 500 -sha256 -extfile td.ext
以上,我們把域名 td.todocoder.com的證書已經創建好了,文件目錄如下:.
├── rootCA.crt
├── rootCA.key
├── rootCA.pem
├── td.ext
├── tdtodocoder.crt
├── tdtodocoder.csr
└── tdtodocoder.key

接下來我們看一下,在nginx 和k8s中是如何用的。

nginx 配置域名td.todocoder.com的證書
我們拿到上面幾步生成的 td.todocoder.com域名的文件,tdtodocoder.key、tdtodocoder.crt
配置到nginx的配置中

server {listen 443 ssl;# 以td.todocoder.com域名訪問server_name td.todocoder.com;# 配置ssl域名證書ssl_certificate     [ssl證書路徑]/tdtodocoder.crt;ssl_certificate_key [ssl證書路徑]/tdtodocoder.key;index index.html index.php;# 反向代理需要被訪問的本地服務location / {proxy_pass http://localhost:8080;}...}
自簽名的域名訪問需要配置host
vi /etc/hosts
192.168.111.37 td.todocoder.com

然后直接訪問 td.todocoder.com 在瀏覽器上應該可以看到證書的信息,注意此時瀏覽器還提示的是證書無效,不安全。后面需要在操作系統信任一下證書就可以了。

如果你用的是k8s ,可以在ingress中配置

ingress配置tls證書
創建secret

$ kubectl -n todocoder create secret tls tdtodocoder-certs --key tdtodocoder.key --cert tdtodocoder.crt
# 重啟ingress controller
$ kubectl rollout restart daemonset.apps/nginx-ingress-controller -n ingress-nginx
配置ingress yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: ingress-todocodernamespace: todocoderannotations:nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:tls:- hosts:- "td.todocoder.com"secretName: tdtodocoder-certsingressClassName: nginxrules:- host: "td.todocoder.com"http:paths:- backend:service:name: todocoder-frontport:number: 8080path: /?(.*)pathType: ImplementationSpecific

以上,我們把域名 td.todocoder.com的證書已經創建好了,如果不創建泛域名的證書可以直接跳過泛域名的創建過程。接下來我們看一下泛域名證書的簽名流程

泛域名的自簽名
泛域名是域名前面的字符不是固定的,可能會根據id生成,比如,我的 id是:fsd423dsf234dsfs, 我自己的泛域名就是 fsd423dsf234dsfs.todocoder.com ,每個用戶都可以有不同的域名。那么我們只需要配置 *.todocoder.com 這個域名就可以,具體操作流程如下:

從上面第3步開始,我們需要用同一個根證書簽名,所以rootCA 的證書就不用再新建了

創建生成域名ssl證書的前置文件
創建一個fanym.ext文件, 注意我們指定了subjectAltName選項。

cat >> fanym.ext <<EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage=digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName=@alt_names[alt_names]
DNS.1 = *.todocoder.com
EOF

注意:這里的 域名配置的 *.todocoder.com

生成域名ssl證書秘鑰(fantodocoder.csr、fantodocoder.key)

$ openssl req -new -sha256 -nodes -out fantodocoder.csr -newkey rsa:2048 -keyout fantodocoder.keyCountry Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Zhengzhou
Locality Name (eg, city) []:Zhengzhou
Organization Name (eg, company) [Internet Widgits Pty Ltd]:fantodocoder
Organizational Unit Name (eg, section) []:fantodocoder
Common Name (e.g. server FQDN or YOUR name) []:*.todocoder.com
Email Address []:todocoder@github.com
...
A challenge password []:rootCA
An optional company name []:fantodocoder

這一步填寫域名證書密鑰需要的信息,會展示在瀏覽器的域名證書信息,其中最重要的是Common Name的內容,必須是對應需要https訪問的域名的。

通過我們之前創建的根SSL證書rootCA.pem, rootCA.key頒發,創建出一個 *.todocoder.com 的域名證書。輸出是一個名為的證書文件fantodocoder.crt(對應位置替換為自己的文件路徑)

$ openssl x509 -req -in fantodocoder.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out fantodocoder.crt -days 500 -sha256 -extfile fanym.extCertificate request self-signature ok
subject=C = CN, ST = Zhengzhou, L = Zhengzhou, O = fantodocoder, OU = fantodocoder, CN = *.todocoder.com, emailAddress = todocoder@github.com
Enter pass phrase for rootCA.key:
當前的目錄結構:.
├── fantodocoder.crt
├── fantodocoder.csr
├── fantodocoder.key
├── fanym.ext
├── rootCA.crt
├── rootCA.key
├── rootCA.pem
├── td.ext
├── tdtodocoder.crt
├── tdtodocoder.csr
└── tdtodocoder.key
Nginx 配置
server {listen 443 ssl;server_name *.todocoder.com;
  # 配置ssl域名證書
     ssl_certificate     [ssl證書路徑]/fantodocoder.crt;ssl_certificate_key [ssl證書路徑]/fantodocoder.key;index index.html index.php;# 反向代理需要被訪問的本地服務location / {proxy_pass http://localhost:8080;}...}

我們用泛域名 fsd423dsf234dsfs.todocoder.com訪問,訪問之前需要配置hosts

vi /etc/hosts
192.168.111.37 fsd423dsf234dsfs.todocoder.com
訪問 fsd423dsf234dsfs.todocoder.com 可以看到我們剛剛的泛域名證書信息。

截止到這一步,我們的域名在nginx或者k8s端已經配置完成,我們想要的效果是在https 訪問的時候,不報錯,并且提示證書安全有效,那么需要我們在我們的操作系統上配置信任證書

各個系統下證書的信任流程
mac 下證書的添加方式
mac系統只需要添加 域名證書就可以,不用添加rootCA 證書

在mac下我們拿到證書后,雙擊tdtodocoder.crt文件->打開鑰匙串->選擇信任

然后重啟瀏覽器再訪問 td.todocoder.com,可以看到顯示https 安全了

Windows下證書的添加方式
Windows 需要添加 rootCA 和域名的證書到系統里面

如果要訪問 td.todocodoer.com 需要安裝 rootCA.crt、tdtodocoder.crt 這兩個證書

雙擊CA根證書->存儲位置選擇本地->指定證書位置(受信任的根證書頒發機構)

ubuntu下證書的添加方式
我的系統是Ubuntu 桌面版 22.04 的版本, ubuntu需要添加 rootCA 和域名的證書到系統里面

拷貝證書到ca證書的目錄
$ sudo cp tdtodocoder.crt /usr/share/ca-certificates/mozilla/tdtodocoder.crt
$ sudo cp fantodocoder.crt /usr/share/ca-certificates/mozilla/fantodocoder.crt
$ sudo cp rootCA.crt /usr/share/ca-certifi
cates/mozilla/rootCA.crt
執行下面的命令按提示選中新添加的證書,確定(點回車) ,選中(點空格鍵)然后選 ”OK” 就行了
$ sudo dpkg-reconfigure ca-certificatesUpdating certificates in /etc/ssl/certs...
rehash: warning: skipping ca-certificates.crt,it does not contain exactly one certificate or CRL
rehash: warning: skipping rootCA.pem,it does not contain exactly one certificate or CRL
1 added, 0 removed; done.
正在處理用于 ca-certificates (20230311ubuntu0.22.04.1) 的觸發器 ...
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.

點回車,點空格選中 -> 回車確定

就可以了.

火狐瀏覽器證書的添加方式
Chrome,safari,Edge等瀏覽器直接就可以訪問了,但是火狐瀏覽器(ubuntu桌面版火狐,其他系統的沒試)的話需要在設置里面添加跟證書。具體操作:

點擊設置-> 搜索證書,點擊查看證書 -> 證書頒發機構 -> 導入 -> rootCA.crt -> 編輯信任

可以看到,火狐瀏覽器已經顯示安全

參考
https://mp.weixin.qq.com/s/Qi2pDCBJYGymLJxBIvqvqg

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/716428.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/716428.shtml
英文地址,請注明出處:http://en.pswp.cn/news/716428.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

(規劃)24屆春招和25屆暑假實習路線準備規劃

春招&&暑假實習&#xff1a; 1.八股&#xff1a; 可以去一些八股網站上面進行閱讀。 2.項目&#xff1a;至少準備1-2個項目&#xff0c;可以條理清晰的進行項目介紹和難點剖析。 3.算法&#xff1a; hot100 &#xff0c;劍指offer 能刷的很熟&#xff0c;算法關就差…

【R包報錯】使用sceasy包轉換rds文件與h5ad文件報錯PyType_GetFlags

想要將scanpy的h5ad文件轉為rds文件&#xff0c;有一個很方便的包sceasy可以使用&#xff0c;安裝簡單&#xff0c;代碼簡易。 安裝方式 # bioconda package:conda install -c bioconda r-sceasy# R package:devtools::install_github("cellgeni/sceasy")#額外需要…

android系統開發之--ROM編譯,repo使用指南

1、檢出代碼&#xff0c;指定git指定的分支和manifest repo init -u git://xxx/xxx/manifest.git -b <BRANCH> -m <MANIFEST> 這里-m和-b的含義是&#xff1a; 1. 注意到manifest.git本身也是一個git project 2. 所以&#xff0c;-b指定的是使用#1中這個git proj…

我的相關獎項

博士錄取證明 名單第53&#xff1a;https://yzb.bupt.edu.cn/content/content.php?p2_2_651 論文鏈接 第一篇&#xff1a;https://doi.org/10.1186/s13677-022-00373-8 第二篇&#xff1a;https://doi.org/10.1016/j.ipm.2022.103167 第三篇&#xff1a;https://doi.org/10…

Unity 腳本-生命周期常用函數

在Unity中&#xff0c;萬物皆是由組件構成的。 右鍵創建C&#xff03;腳本&#xff0c;拖動腳本到某物體的組件列表。 生命周期相關函數 using System.Collections; using System.Collections.Generic; using UnityEngine;// 必須要繼承 MonoBehaviour 才是一個組件 // 類名…

matplotlib——散點圖和條形圖(python)

散點圖 需求 我們獲得北京2016年三月和十月每天白天最高氣溫&#xff0c;我們現在需要找出氣溫隨時間變化的某種規律。 代碼 # 導入庫 from matplotlib import pyplot as plt import random# 解決中文亂碼 import matplotlib matplotlib.rc("font",family"F…

【筆記】-編程語言以及應用領域

C/C 永遠不會衰敗的語言&#xff0c;適合偏底層&#xff0c;例如&#xff1a;Windows操作系統80%以上都是由C/C完成的&#xff0c;C/C也集成用于寫應用層C/S架構的軟件 JAVA 是真正的跨平臺的語言 “一次編程&#xff0c;到處使用”Java適合應用層的開發&#xff0c;無論是…

Python的錯誤和異常

文章目錄 python的語法錯誤異常異常處理用戶自定義異常定義清理行為預定義的清理行為 python的語法錯誤 語法錯誤&#xff08;Syntax Error&#xff09;是指代碼不符合Python語言的語法規則。當解釋器在執行代碼之前對其進行解析時&#xff0c;如果發現代碼中有語法錯誤&#…

領域驅動設計(Domain-Driven Design DDD)——戰略設計1

一、概述 隨著系統的增長&#xff0c;它會越來越復雜&#xff0c;當我們無法通過分析對象來理解系統的時候&#xff0c;就需要掌握一些操縱和理解大模型的技術了。 最負雄心的企業欲實現一個涵蓋所有業務、緊密集成的系統。因大型公司的業務模型巨大且復雜&#xff0c;很難把它…

2403d,d的108版本更改

原文 編譯器更改 1,在object.d中給TypeInfo_Class添加了.nameSig字段 2,總是在調用點求值像__FILE__此類關鍵字 3,現在可按整數數組轉換十六進制串 4,添加支持插值式序列 庫更改 1,isForwardRange,isBidirectionalRange和isRandomAccessRange現在帶可選元素類型 2,std.uni已…

K8s 鏡像緩存管理 kube-fledged 認知

寫在前面 博文內容為K8s 鏡像緩存管理 kube-fledged 認知內容涉及&#xff1a; kube-fledged 簡單介紹部署以及基本使用 理解不足小伙伴幫忙指正 不必太糾結于當下&#xff0c;也不必太憂慮未來&#xff0c;當你經歷過一些事情的時候&#xff0c;眼前的風景已經和從前不一樣了。…

springboot236基于springboot在線課程管理系統的設計與實現

基于SpringBoot在線課程管理系統的設計與實現 摘要 本文首先介紹了在線課程管理系統的現狀及開發背景&#xff0c;然后論述了系統的設計目標、系統需求、總體設計方案以及系統的詳細設計和實現&#xff0c;最后對在線課程管理系統進行了系統檢測并提出了還需要改進的問題。本系…

Spring Data Redis 使用方式

在Java中操作Redis 1. 在Java中操作Redis1.1 Redis的Java客戶端1.2 Spring Data Redis使用方式1.2.1 介紹1.2.1 環境搭建1.2.3 操作常見類型數據 1. 在Java中操作Redis 1.1 Redis的Java客戶端 Redis 的 Java 客戶端很多&#xff0c;常用的幾種&#xff1a; JedisLettuceSpri…

關于Axios接口請求超時處理與重試的方法教程

在前端開發中&#xff0c;使用Axios作為HTTP客戶端庫進行接口請求是非常常見的做法。然而&#xff0c;在實際開發中&#xff0c;我們經常會遇到網絡不穩定或服務器響應緩慢導致接口請求超時的情況。為了提高用戶體驗和程序的穩定性&#xff0c;我們需要實現接口請求超時的處理與…

UnityAPI的學習——Transform類

Transform類繼承自Component類&#xff0c;并實現了IEnumberable接口。Transform是GameObject必須擁有得一個組件&#xff0c;用來管理所在GameObject對象的坐標位置、選擇角度、和大小縮放。 Transform實現了IEnumberable接口&#xff0c;因此可以在程序中使用foreach()方法快…

echarts vue 動畫效果的水球圖、波浪圖教程

1、安裝插件 前提是已經安裝了echarts&#xff08;我的版本是4.2.1&#xff09; npm install echarts-liquidfill --save 我安裝了3.1.0版本的&#xff0c;結果運行時報錯"TypeError: wave.ensureState is not a function" 原因&#xff1a;echarts版本和echarts-l…

miniconda3徹底刪除虛擬環境

退出虛擬環境&#xff1a;確保您不在要刪除的虛擬環境中。如果在&#xff0c;使用命令 conda deactivate 來退出當前激活的虛擬環境。查看虛擬環境列表&#xff1a;運行命令 conda env list 或 conda info -e 來查看所有存在的虛擬環境及其路徑。刪除虛擬環境&#xff1a;使用命…

在VMware中安裝CentOS 7并配置Docker

VMware安裝CentOS 7 一、介紹 該文章介紹如何使用啟動U盤在虛擬機里面安裝系統&#xff0c;虛擬機版本為VMware Workstation 16 pro&#xff0c;Linux版本為CentOS Linux release 7.9.2009 (Core)。 二、安裝 1、創建虛擬機 點擊創建新的虛擬機 選擇典型就可以了&#xf…

前綴和算法題(區間次方和、小藍平衡和、大石頭的搬運工、最大數組和)

一、前綴和的原理和特點 prefix表示前綴和&#xff0c;前綴和由一個用戶輸入的數組生成。對于一個數組a[]&#xff08;下標從1開始&#xff09;&#xff0c;我們定義一個前綴和數組prefix[]&#xff0c;滿足&#xff1a; prefix有一個重要的特性&#xff0c;可以用于快速生成p…

WordPress建站入門教程:如何安裝本地WordPress網站運行環境?

有些站長想要搭建WordPress網站&#xff0c;又擔心自己玩不轉&#xff0c;白白浪費購買域名和主機空間的費用。像這種情況&#xff0c;最好的做法就是在自己電腦上安裝一個WordPress網站運行環境&#xff0c;然后在本地電腦搭建WordPress&#xff0c;等熟悉掌握后再考慮購買域名…