如何使用OpenSSL創建自籤名SSL證書

2022-01-02 軟體開發烹鮮之路

近期的工作中遇到了數據傳輸加密的需求,就是在數據傳輸安全層面都要求使用https協議,因此為Web站點安裝SSL證書就成了必須,以下就過程記錄。

1.需求及選型

需求有兩條:

我們很多項目都是在內部區域網運行,沒有公網IP,更沒有域名,因此必須能支持內網IP位址。

相當一部分SSL證書需要付費購買,雖然一般不是很貴,成本也需要稍稍考慮一下。免費的SSL證書也有不少地方可以申請,但是能支持內網IP位址的好像沒有。

基於這兩條考慮,考慮使用開源組件OpenSSL創建自籤名SSL證書。自己發給自己的證書,可不就想怎麼改就怎麼改。

2.OpenSSL創建自籤名證書過程


2.1安裝或更新OpenSSL組件

CentOS作業系統是自帶OpenSSL組件,可以選擇直接使用或者更新後使用。

查看OpenSSL版本

獲取最新版本OpenSSL

解壓後進行編譯安裝配置,升級到最新版本

tar -zxvf openssl-1.1.1k.tar.gz cd openssl-1.1.1k ./config make && make installmv /usr/bin/openssl /usr/bin/openssl.bakln -sf /usr/local/openssl/bin/openssl /usr/bin/opensslecho "/usr/local/openssl/lib" >> /etc/ld.so.confldconfig -v

升級完成後可以查看OpenSSL提供的命令。

2.2 創建證書配置文件

創建一個後綴為cnf的配置文件,名稱隨便起,但是要記得,後面會用到。

[req]distinguished_name = req_distinguished_name encrypt_key = noreq_extensions = req_ext 

[req_distinguished_name]countryName = CNcountryName_default = USstateOrProvinceName = JiangSustateOrProvinceName_default = JiangSulocalityName = NanJinglocalityName_default = NanJingorganizationalUnitName = WorkorganizationalUnitName_default = WorkcommonName = www.默認域名或IP.comcommonName_max = 64

[req_ext]basicConstraints = CA:FALSEkeyUsage = nonRepudiation, digitalSignature, keyEnciphermentsubjectAltName = @alt_names

[alt_names]DNS.1 = www.域名1.comDNS.2 = *.域名2.comDNS.3 = 域名3IP.1 = 192.168.199.86IP.2 = 192.168.199.1IP.3 = 127.0.0.1

其中req_distinguished_name項內是證書的基本信息,alt_names是可以使用證書的域名和IP位址,可以填寫多個。

注意:req_distinguished_name、req_ext、alt_names這幾個要前後對應

2.3 創建自籤名SSL證書

總體過程是先創建一個私鑰,然後通過私鑰創建一系列證書。

下面是在CentOS中的執行示例

#輸出私鑰ca.key,使用rsa算法、2048位openssl genrsa -out ca.key 2048 #根據私鑰ca.key生成ca.csr,使用配置文件san.cnf,擴展項為req_extopenssl req -new -key ca.key -out ca.csr -config san.cnf -extensions req_ext #籤發證書ca.crtopenssl x509 -req -in ca.csr -signkey ca.key -out ca.crt -extfile san.cnf -extensions req_ext 

#輸出私鑰client.key,使用rsa算法、2048位openssl genrsa -out client.key 2048#根據私鑰client.key生成client.csr,使用配置文件san.cnf,擴展項為req_extopenssl req -new -key client.key -out client.csr -config san.cnf -extensions req_ext#籤發證書client.crtopenssl x509 -req -sha256 -extfile req_ext -CA ca.crt -CAkey ca.key -CAcreateserial -in client.csr -out client.crt

通過命令行可以查看密鑰的內容

openssl rsa -in ca.key -text -noout

最後生成的是這麼一堆文件

後綴為crt的就是我們需要的證書文件。

3.安裝SSL證書

3.1 Nginx站點安裝SSL證書

找到站點所在的Niginx伺服器,打開配置文件nginx.conf

server {listen 8008 ssl; server_name  

ssl on;

ssl_certificate /usr/local/nginx/ssl/ssl.pem; ssl_certificate_key /usr/local/nginx/ssl/ssl.key;

ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;

ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;

location / {proxy_pass http://需要訪問的域名:8080/;}}

之後重啟Niginx即可生效。

如果你的伺服器安裝了寶塔bt運維工具,為站點安裝SSL證書的過程就更方便了,完全的圖形化操作過程。

打開站點配置>SSL>其他證書,分別將私鑰ca.key與證書ca.crt中內容拷貝到文本框中,保存即可。

3.2 Windows作業系統安裝證書

雙擊證書ca.crt,彈出提示框,開始證書安裝。

選擇證書安裝,進入證書導入嚮導界面,選擇存儲位置為「本地計算機」。

繼續下一步,將證書安裝至「受信任的根證書頒發機構」。

4.後續處理

SSL證書創建完、安裝完並不是就結束了,開發人員的工作還沒結束呢。

目前我們採用的是前後端分離的開發方式,SSL證書一般加在前端站點上。但是使用https的站點會禁用http請求,這就要求所有的請求都必須是https協議的,也就是前端的調用、後端的接口提供都需要在代碼中改成https形式。

相關焦點

  • 如何製作和使用自籤名證書
    如何製作和使用自籤名證書在計算機加密和安全領域中,我們會時常遇到:自籤名安全證書。因為自籤名證書籤發相對於商業證書流程簡單,費用低廉(除了電費幾乎不花錢),更新容易。寫在前面經常有人說,使用自籤名證書不安全,會導致中間人攻擊。這裡需要為自籤名證書「正名」,如果你製作生成的證書被妥善保管(即不洩漏並被二次利用),並將其加入你的有限的設備(自用、團隊使用)的證書信任列表中,在明確你的設備訪問地址(不涉及DNS攻擊),你是不會遇到中間人攻擊的。
  • 使用Python v3.4 + SSLContext 進行SSL / TLS客戶端證書驗證
    ,keyfile = server_key)context.load_verify_locations(憑證檔案錯誤= client_certs)以下是驗證對方證書的客戶端和伺服器的完整示例:在這個例子中,我們將創建自籤名伺服器和客戶端證書。
  • OpenSSL 在 Apache 和 Dovecot 下的使用(一)
    : CARLA SCHRODER譯者: geekpi在這有兩部分的系列中,Carla Schroder 會向你展示如何創建自己的 OpenSSL 證書以及如何配置 Apache 和 Dovecot 來使用它們。
  • Python 獲取 NCBI 基因名 SSL 證書異常?
    :1056)>根據網絡上的解析,當使用 urllib.urlopen 打開一個 https 連結時,會驗證一次 SSL 證書。而當目標網站使用的是自籤名的證書時就會拋出如下異常:ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)
  • 網際網路的安全是如何保證的:TLS、SSL 和 CA | Linux 中國
    然後,我會解釋證書頒發機構certificate authority和自籤名證書,以及它們如何幫助保護一個網站。最後,我會介紹一些開源的工具,你可以使用它們來創建和管理你的證書。通過 https 保護路由了解一個受保護的網站的最簡單的方式就是在交互中觀察它,幸運的是,在今天的網際網路上,發現一個安全的網站遠遠比找到一個不安全的網站要簡單。
  • SSL證書配置
    推薦使用默認配置make && make installopenssl默認將被安裝到/usr/local/ssl 2.    安裝Apache  .Apache 將被安裝到/usr/local/apache   二、  生成證書請求文件*密鑰文件不區分作業系統平臺,推薦使用autocsr工具在本地創建證書請求文件。
  • 物聯網網關 QT5 使用 SSL自籤名證書訪問雲端HTTPS REST API 服務
    HTTPS的主要思想是在不安全的網絡上創建一安全信道,並可在使用適當的加密包和伺服器證書可被驗證且可被信任時,對竊聽和中間人攻擊提供合理的防護。HTTPS利用SSL/TLS來加密數據包,TLS協議是與應用層協議獨立無關的。高層的應用層協議(例如:HTTP、FTP、Telnet等等)能透明的創建於TLS協議之上。
  • 公鑰基礎設施(PKI)原理+OpenSSL實戰
    配置apt使用阿里源,並使用apt命令安裝openssl本次實驗基於OpenSSL 1.1.1,使用如下命令查看openssl版本號公鑰加密體系中生成Root CA的自籤名數字證書cacert.pem,即使用Root CA的私鑰對Root CA的公鑰+基本信息進行籤名root@learn01:/etc/pki/tls# openssl req -new -x509 -days 3650 -passin file:
  • HTTPS 證書生成原理和部署細節
    對於一般的小型網站尤其是博客,可以使用自籤名證書來構建安全網絡,所謂自籤名證書,就是自己扮演 CA 機構,自己給自己的伺服器頒發證書。  生成密鑰、證書  第一步,為伺服器端和客戶端準備公鑰、私鑰# 生成伺服器端私鑰openssl genrsa -out server.key 1024# 生成伺服器端公鑰openssl rsa -in server.key -pubout -out server.pem # 生成客戶端私鑰openssl genrsa -out client.key
  • OpenSSL 在 Apache 和 Dovecot 下的使用(二)
    -2 作者: CARLA SCHRODER譯者: geekpi本篇中,Carla Schroder 會解釋如何使用 OpenSSL 保護你的 Postfix/Dovecot 郵件伺服器在上周[1],作為我們 OpenSSL 系列的一部分,我們學習了如何配置 Apache 以使用 OpenSSL 並強制所有會話使用 HTTPS。
  • MongoDB安全實戰之SSL協議加密
    2.2 證書證書頒發機構在生產環境下,MongoDB應使用有效證書的生成和由一個單一的認證機構籤名。生成pem文件在使用SSL之前,必須有一個包含公鑰證書及其相關私鑰的PEM文件。MongoDB可以使用任何有效的SSL證書由證書頒發機構頒發的證書或自籤名證書。
  • RHCE 系列(八):在 Apache 上使用網絡安全服務(NSS)實現 HTTPS
    如果你使用 mod_nss,首先要卸載 mod_ssl,反之如此。# yum remove mod_ssl配置 NSS(網絡安全服務)安裝完 mod_nss 之後,會創建默認的配置文件 /etc/httpd/conf.d/nss.conf。
  • HTTPS證書生成原理和部署細節
    伺服器端先使用私鑰解密,拿到 premaster secret,此時客戶端和伺服器端都擁有了三個要素:random-client、random-server 和 premaster secret此時安全通道已經建立,以後的交流都會校檢上面的三個要素通過算法算出的 session keyCA 數字證書認證中心如果網站只靠上圖運作,可能會被中間人攻擊,試想一下,
  • Android正確使用HTTPS
    = null) { result.append(line);}return result.toString();以上代碼,訪問CA籤發證書的HTTPS網站是沒問題的,但是,通常程序猿寫代碼是在測試環境下進行測試,測試環境下的HTTPS證書一般都是使用openssl生成的自籤名證書,此時使用上面的代碼訪問,就會報如下錯誤:
  • 在 FreeBSD 10.2 上如何通過配置 Apache 和 SSL 安裝 Bugzilla
    它經常被一些高科技公司如 mozilla、紅帽公司和 gnome 使用。Bugzilla 起初由 Terry Weissman開發於1998年,它用 perl 語言編寫,用 MySQL 作為後端資料庫。它是一款旨在幫助管理軟體開發的伺服器軟體,它有豐富的功能、高度優化的資料庫、卓越的安全性、高級的搜索工具、集成了郵件功能等等。
  • JDK製作自籤名證書,實現雙向認證,解決谷歌瀏覽器證書無效問題,親測有效
    本文將介紹如何使用JDK8和tomcat8.5實現使用自籤名證書完成TSL雙向認證,並解決谷歌瀏覽器提示證書無效的問題。
  • 【數據安全系列】5分鐘快速理解 SSL 安全通信原理!
    獲取 SSL 數字證書主要有有兩種途徑:自籤名證書或向 CA 提供商申請註冊1.  自籤名方式,可以通過一些開源工具,Openssl 或 Keytool,優點是免費,缺點是客戶端使用時需要信任該證書,比如瀏覽器上會顯示非安全網站,影響網站信譽,適合公司內部使用。
  • openssl 筆記
    /demoCA/cacert.pem籤發用戶證書openssl ca -in userreq.pem -out usercert.pem# 這種方式適合,配置了完整的 openssl.cnf 文件, CA 證書和 CA 證書的私鑰都放入到指定的地方,創建了 index.txt 和 serial 文件, 具體配置可以參考
  • SSL證書格式詳解與轉換
    轉自:http://www.ttlsa.com/safe/ssl-certificate-format-and-conversion/
  • 一次因SNI引起的HTTPS證書不可信的問題排查
    經過握手,客戶端與伺服器均持有這3個隨機數,按照事先商定的加密方法,各自生成本次會話使用的對稱加密秘鑰即上面提到的會話秘鑰,接下來就可以使用這個會話秘鑰加密內容進行加密通信了。這裡需要注意,整個握手階段的所有通信都是明文的。那麼在明文通信的情況下要如何保證與客戶端交換會話秘鑰的就是它所請求的伺服器,而不是其他第三方冒充呢?