1. 程式人生 > >OpenSSL自簽發配置有多域名或ip地址的證書

OpenSSL自簽發配置有多域名或ip地址的證書

環境

翻譯加實踐

概述

HTTPS服務是工作在SSL/TLS上的HTTP。
首先簡單區分一下HTTPS,SSL ,TLS ,OpenSSL這四者的關係:

  1. SSL:(Secure Socket Layer,安全套接字層)是在客戶端和伺服器之間建立一條SSL安全通道的安全協議;
  2. TLS:(Transport Layer Security,傳輸層安全協議),用於兩個應用程式之間提供保密性和資料完整性;
  3. TLS的前身是SSL;
  4. OpenSSL是TLS/SSL協議的開源實現,提供開發庫和命令列程式;
  5. HTTPS是HTTP的加密版,底層使用的加密協議是TLS。

結論:SSL/TLS 是協議,OpenSSL是協議的程式碼實現。

用OpenSSL配置帶有SubjectAltName的ssl請求

對於多域名,只需要一個證書就可以保護非常多的域名。
SubjectAltNameX509 Version 3 (RFC 2459)的擴充套件,允許ssl證書指定多個可以匹配的名稱。

SubjectAltName 可以包含email 地址,ip地址,正則匹配DNS主機名,等等。
ssl這樣的一個特性叫做:SubjectAlternativeName(簡稱:san

生成證書請求檔案

對於一個通用的ssl證書請求檔案(CSR),openssl不需要很多操作。
因為我們可能需要新增一個或者兩個SAN到我們CSR,我們需要在openssl

配置檔案中新增一些東西:你需要告訴openssl建立一個包含x509 V3擴充套件的CSR,並且你也需要告訴openssl在你的CSR中包含subject alternative names列表。

建立一個openssl配置檔案(openssl.cnf),並啟用subject alternative names

找到req段落。這段落的內容將會告訴openssl如何去處理證書請求(CSR)。
req段落中應該要包含一個以req_extensions開始的行。如下:

[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req

這個配置是告訴opensslCSR中要包含v3_req段落的部分。
現在我們來配置v3_req,如下:

[req_distinguished_name]
countryName = Country Name (2 letter code)
countryName_default = US
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = MN
localityName = Locality Name (eg, city)
localityName_default = Minneapolis
organizationalUnitName  = Organizational Unit Name (eg, section)
organizationalUnitName_default  = Domain Control Validated
commonName = Internet Widgits Ltd
commonName_max  = 64

[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = kb.example.com
DNS.2 = helpdesk.example.org
DNS.3 = systems.example.net
IP.1 = 192.168.1.1
IP.2 = 192.168.69.14

請注意:無論v3_req放哪裡,都是可以的,都會在所有生成的CSR中。
要是之後,你又想生成一個不同的SANsCSR檔案,你需要編輯這個配置檔案,並改變DNS.x列表。

生成私鑰

首先我們建立一個私鑰:

openssl genrsa -out san_domain_com.key 2048
# 如果是生成ca的使用,建議這樣
openssl genrsa -out ca.key 2048

這裡的san_domain_com,是你正式使用的伺服器的全稱地址,這不是必須的,也就是說,你可以隨便取名字;但是按照這個格式去,會更清晰點。

建立CSR檔案

執行下面語句:

openssl req -new -out san_domain_com.csr -key san_domain_com.key -config openssl.cnf
# 注意這裡指定了openssl.cnf,使用了上面我們建立的,因為預設是沒有`san`。
# 如果之前建立的是ca.key
openssl req -new -out ca.csr -key c.key -confaig openssl.cnf

執行後,系統會提示你要你輸入組織資訊,並詢問你是否想要包含密碼(你可以不需要)。接著你將會看到san_domain_com.csr被建立。

檢查我們是否建立好了,我們可以使用下面的命令來檢視CSR包含的資訊:

openssl req -text -noout -in san_domain_com.csr
# 如果是ca.csr
openssl req -text -noout -in ca.csr

你將會看到類似如下的資訊:

Certificate Request:
Data:
Version: 0 (0x0)
Subject: C=US, ST=Texas, L=Fort Worth, O=My Company, OU=My Department, CN=server.example
Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit)
Modulus (2048 bit): blahblahblah
Exponent: 65537 (0x10001)
Attributes:
Requested Extensions: X509v3
Basic Constraints: CA:FALSE
X509v3 Key Usage: Digital Signature, Non Repudiation, Key Encipherment
X509v3 Subject Alternative Name: DNS:kb.example.com, DNS:helpdesk.example.com
Signature Algorithm: sha1WithRSAEncryption
blahblahblah

好了現在我們有了一個新的CSR,接著我們需要對它進行簽署。

自簽名並建立證書

openssl x509 -req -days 3650 -in san_domain_com.csr -signkey san_domain_com.key
 -out san_domain_com.crt-extensions v3_req -extfile openssl.cnf

# 如果是ca.csr
openssl x509 -req -days 3650 -in ca.csr -signkey ca.key
 -out ca.crt-extensions v3_req -extfile openssl.cnf

說明下:上面的證書 有效期是3650天。

至此就建立完畢。

以下是我自己擴充套件:

上面只是把ca證書給生成出來了,但是如何利用生成的ca來簽名客戶端的證書呢?

建立客戶端私鑰

openssl genrsa -out client.key 1024

這和上面是一樣的,就是名稱改下;

建立證書請求檔案CSR

openssl req -new -key client.key -out client.csr -config openssl.cnf -extensions v3_req

利用ca.crt來簽署client.csr

openssl x509 -req -sha256 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in client.csr -out client.crt

# 或者 把v3.ext 改為 openssl.cnf
openssl x509 -req -sha256 -extfile openssl.cnf -CA ca.crt -CAkey ca.key -CAcreateserial -in client.csr -out client.crt

說明:
sha256是雜湊演算法
v3.ext是要自己建立的

v3.ext

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage=digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName[email protected]_names

[alt_names]
DNS.1=www.test.com
IP.1 = 192.168.1.1

至此就生成出了,客戶端的證書。

同理伺服器端證書是一樣的。

檔案數量:
ca: ca.key、ca.csr、ca.crt
client: client.key、client.csr 、 client.crt

以下是我自己實際執行的語句:

# 生成ca
openssl genrsa -out ca.key 1024
openssl req -new -key ca.key -out ca.csr -config openssl.cnf -extensions v3_req
openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt -extfile openssl.cnf -extensions v3_req
# 生成client
openssl genrsa -out client.key 1024
openssl req -new -key client.key -out client.csr -config openssl.cnf -extensions v3_req
openssl x509 -req -sha256 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in client.csr -out client.crt

可以用來檢視簽發的證書的詳細資訊
openssl x509 -text -noout -in client.crt

可以用來檢視該 CA 下所有已撤消證書的 詳細資訊
openssl crl -in crl.pem -noout -text

參考地址:

相關推薦

OpenSSL簽發配置域名ip地址證書

環境 翻譯加實踐 概述 HTTPS服務是工作在SSL/TLS上的HTTP。 首先簡單區分一下HTTPS,SSL ,TLS ,OpenSSL這四者的關係: SSL:(Secure Socket Layer,安全套接字層)是在客戶端和伺服器之間建立一

Tomcat域名IP地址訪問方式配置方法

1、配置www.***.com域名方式訪問 在Tomcat下面配置域名(如:www.***.com)的時候,同時又不希望客戶通過我們網站的IP或者域名訪問到Tomcat預設的ROOT,配製方法如下:   1、開啟Tomcat安裝目錄下的/conf/server.xml檔案

IIS 之 IIS 7及以上域名端口綁定同一物理目錄並設置不同默認文檔

clas host doc ebs dex 導致 color 不同 amp   今天在 IIS 7 多端口或域名綁定同一物理目錄,設置不同的默認文檔遇到問題:同一物理目錄的多個站點修改任意一個站點默認文檔都會一起更改。   原因:在同一個物理目錄下只有一個 web.conf

centos7 lamp環境配置域名設定

預設安裝後 apache 也就是httpd 配置檔案在 /etc/httpd/conf 目錄 預設php 安裝目錄在/etc/php.ini 下邊是我配置好後的httpd.conf # # This is the main Apache HTTP

openssl 簽發證書及ssl 原理簡介(一)

提綱: 1、使用openssl自簽發證書 2、配置apache 3、配置客戶端 4、使用自簽發證書訪問apache 一、使用Openssl自簽發證書 首先裝openssl 。編輯配置檔案/etc/ssl/openssl.conf ,配置TSA root dir 等以下配置

並行請求域名IP地址

python/gevent以下示例顯示如何同時運行任務。 import gevent from gevent import socket urls = [‘www.baidu.com‘, ‘www.sina.com‘, ‘www.sohu.com‘] jobs = [gevent.spawn(socket.g

支持域名的免費SSL證書

配置教程 自動配置 blog logs cer tps nbsp lan https 知乎網友稱其支持多域名: https://www.zhihu.com/question/19578422 配置教程: https://www.cnblogs.com/duanweish

nginx代理雙域名,同一個IP地址的伺服器實現兩個域名配置

作業系統環境:win2003Server 安裝軟體:Nginx 環境:安裝兩個tomcat服務,一個為9001埠、一個為9002埠,nginx預設為80埠 #目的:實現一個80埠,兩個域名同時可以訪問,nginx作為代理接收80埠的資料,轉發到後端的tomcat服務處理 1

LEDE配置DHCP按順序分配ip地址

LEDELEDE配置DHCP按順序分配ip地址

Linux下配置CentOS7網路設定 獲取ip地址

1、檢視ip地址     ip addr 2、編輯網絡卡配置檔案     cd /etc/sysconfig/network-scripts     vi /ifcfg-ens33   &n

ubuntu 通過修改 /etc/hosts 強制捆綁域名IP地址

通過修改 /etc/hosts 強制捆綁域名和IP地址 下面通過將  abc.com 的IP指定為 127.0.0.1 為例: 一、開啟 /etc/hosts 檔案,在其中新增如下一行: 127.0.0.1       abc.com 儲存退出

使用飛豬動態IP修改器修改夜神安卓開模擬器IP地址圖文教程

很多玩家一因為想上多個賬戶但是被限制使用了夜神多開模擬器,但是還是無法登入多個賬戶或者無法正常組隊等等問題,那是因為多開了但是模擬器 IP地址是一樣的問題造成的!所以今天教大家如何在模擬器上修改模擬器地址,讓每個多開的模擬器中地址都不一樣! 第一,安裝夜神多開模擬器。 第二, 多開的模

域名IP地址是一回事嗎?建網站要買域名還要買IP地址嗎?

去年我在網通花了150元買了一個域名,他們在登記單上的域名費一欄填了150元,登記單上還有IP使用費一欄他們什麼也沒有填寫,如果域名與IP地址是同一個專案,是一回事,他們不是在重複收費嗎? 不是一回事,ip地址通常指定的是伺服器,也就是主機,建立網站需要域名和主機的。 購買域名和主機之後,域名需

CentOS 7.x網路配置,設定自動獲取IP地址

檢視網路配置資訊 使用以下命令檢視網格配置資訊: ip addr 為什麼不是ifconfig呢?因為它已經在新版的CentOS中被優化掉啦!如果有需要,可以用以下命令將其召喚回來,但前提是你得先能連上網啊,哈哈! yum install net-tools -y 示例

CentOS 7.x網路配置,手工設定靜態IP地址

修改模式 BOOTPROTO=static 設定IP地址 IPADDR=192.168.1.101 GATEWAY=192.168.1.1 BROADCAST=192.168.1.255 NETMASK=255.255.255.0 DNS1=192.168.1.1 重啟生

網址(url),域名ip地址,dns,hosts之間的關係

什麼是ip? 我們知道,在Internet上有千百萬臺主機,為了區分這些主機,人們給每臺主機都分配了一個專門的地址,稱為IP地址。通過IP地址就可以訪問到每一臺主機。 IP地址由4部分數字組成,每部分都不大於256,各部分之間用小數點分開。例如“百度搜索”主機的IP地址就

Linux學習筆記(10)linux網路管理與配置之一——主機名與IP地址

Linux學習筆記(10)linux網路管理與配置之一——主機名與IP地址 大綱目錄 0.常用linux基礎網路命令 1.配置主機名 2.配置網絡卡資訊與IP地址 3.配置DNS客戶端 4.配置名稱解析順序 5.配置路由與預設閘道器 6.雙網絡卡繫結   1.配置主機名 1.1

域名IP地址的聯絡與區別

(轉載自一個好朋友的部落格連結,略有修改,共同學習,共同進步!) 我們也知道每一臺機都有一個唯一ip地址, 特別難記,所以出現了今天的DNS(域名) 當我們的計算機想要和一個遠端機器連線時,我們可以申請連線該機器ip地址下的DNS,例如:www.baidu.com。

(2)如何配置Linux系統的網路IP地址---學習筆記

CentOS 7系統為例為大家介紹整個網路配置的過程。 一臺安裝了Linux系統的電腦如果想要聯網,首先要做的就是進行網路配置。 首先注意,路由閘道器處必須設定可以配置靜態IP或者使用指定IP繫結MAC才可以配置,否則配置不成功,不要盲目的配置. 再次以根使用者登入系統,

模擬DNS查詢域名IP地址

一直搞不明白,通過域名訪問網頁的時候計算機是在什麼時候進行域名的解析,最近通過閱讀《網路是怎樣連線的》得到了答案, 下面就是我的簡單理解和實驗,僅供參考: 瀏覽器在根據HTTP協議生成HTTP請求訊息之後,會將URL中的域名傳送給你電腦上的DNS解析器(DNS客戶端),呼叫解析器後,解析