apache伺服器中openssl配置https

2021-08-19 20:36:03 字數 4710 閱讀 7393

最近需要研究下apache的簽名問題,主要是利用openssl來實現,就對openssl研究了下。

理論基礎:

openssl初接觸的人恐怕最難的在於先理解各種概念

公鑰/私鑰/簽名/驗證簽名/加密/解密/非對稱加密

因為公鑰加密的資料只有它相對應的私鑰可以解開,所以你可以把公鑰給人和人,讓他加密他想要傳送給你的資料,這個資料只有到了有私鑰的你這裡,才可以解開成有用的資料,其他人就是得到了,也看懂內容.同理,如果你用你的私鑰對資料進行簽名,那這個資料就只有配對的公鑰可以解開,有這個私鑰的只有你,所以如果配對的公鑰解開了資料,就說明這資料是你發的,相反,則不是.這個被稱為簽名.

實際應用中,一般都是和對方交換公鑰,然後你要發給對方的資料,用他的公鑰加密,他得到後用他的私鑰解密,他要發給你的資料,用你的公鑰加密,你得到後用你的私鑰解密,這樣最大程度保證了安全性.

rsa/dsa/sha/md5

非對稱加密的演算法有很多,比較著名的有rsa/dsa ,不同的是rsa可以用於加/解密,也可以用於簽名驗籤,dsa則只能用於簽名.至於sha則是一種和md5相同的演算法,它不是用於加密解密或者簽名的,它被稱為摘要演算法.就是通過一種演算法,依據資料內容生成一種固定長度的摘要,這串摘要值與原資料存在對應關係,就是原資料會生成這個摘要,但是,這個摘要是不能還原成原資料的,嗯....,正常情況下是這樣的,這個演算法起的作用就是,如果你把原資料修改一點點,那麼生成的摘要都會不同,傳輸過程中把原資料給你再給你乙個摘要,你把得到的原資料同樣做一次摘要演算法,與給你的摘要相比較就可以知道這個資料有沒有在傳輸過程中被修改了.

實際應用過程中,因為需要加密的資料可能會很大,進行加密費時費力,所以一般都會把原資料先進行摘要,然後對這個摘要值進行加密,將原資料的明文和加密後的摘要值一起傳給你.這樣你解開加密後的摘要值,再和你得到的資料進行的摘要值對應一下就可以知道資料有沒有被修改了,而且,因為私鑰只有你有,只有你能解密摘要值,所以別人就算把原資料做了修改,然後生成乙個假的摘要給你也是不行的,你這邊用金鑰也根本解不開.

ca/pem/der/x509/pkcs

一般的公鑰不會用明文傳輸給別人的,正常情況下都會生成乙個檔案,這個檔案就是公鑰檔案,然後這個檔案可以交給其他人用於加密,但是傳輸過程中如果有人惡意破壞,將你的公鑰換成了他的公鑰,然後得到公鑰的一方加密資料,他就可以用他自己的金鑰解密看到資料了.為了解決這個問題,需要乙個公證方來做這個事,任何人都可以找它來確認公鑰是誰發的.這就是ca,ca確認公鑰的原理也很簡單,它將它自己的公鑰發布給所有人,然後乙個想要發布自己公鑰的人可以將自己的公鑰和一些身份資訊發給ca,ca用自己的金鑰進行加密,這裡也可以稱為簽名.然後這個包含了你的公鑰和你的資訊的檔案就可以稱為證書檔案了.這樣一來所有得到一些公鑰檔案的人,通過ca的公鑰解密了檔案,如果正常解密那麼機密後裡面的資訊一定是真的,因為加密方只可能是ca,其他人沒它的金鑰啊.這樣你解開公鑰檔案,看看裡面的資訊就知道這個是不是那個你需要用來加密的公鑰了.

實際應用中,一般人都不會找ca去簽名,因為那是收錢的,所以可以自己做乙個自簽名的證書檔案,就是自己生成一對金鑰,然後再用自己生成的另外一對金鑰對這對金鑰進行簽名,這個只用於真正需要簽名證書的人,普通的加密解密資料,直接用公鑰和私鑰來做就可以了.

金鑰檔案的格式用openssl生成的就只有pem和der兩種格式,pem的是將金鑰用base64編碼表示出來的,直接開啟你能看到一串的英文本母,der格式是二進位制的金鑰檔案,直接開啟,你可以看到........你什麼也看不懂!.x509是通用的證書檔案格式定義.pkcs的一系列標準是指定的存放金鑰的檔案標準,你只要知道pem der x509 pkcs這幾種格式是可以互相轉化的.

關於證書

1、每個人都可以使用一些證書生成工具為自己的https站點生成證書(比如jdk的keytool),大家稱它為「自簽名證書」,但是自己生成的證書是不被網際網路承認的,所以瀏覽器會報安全提示,要求你手動安裝證書。只有通過權威的ca機構付費獲得的證書才能被網際網路承認(有點類似於根域伺服器的權威機構)。

2、證書(無客戶端服務端之分)儲存著ip資訊、證書過期時間、證書所有者位址資訊等。

雙向認證

1、先決條件是有兩個或兩個以上的證書,乙個是服務端證書,另乙個或多個是客戶端證書。

2、服務端儲存著客戶端的證書並信任該證書,客戶端儲存著服務端的證書並信任該證書。這樣,在證書驗證成功的情況下即可完成請求響應。

3、雙向認證一般企業應用對接。

單向認證

1、客戶端儲存著服務端的證書並信任該證書即可

2、https一般是單向認證,這樣可以讓絕大部分人都可以訪問你的站點。

下面了解下證書一般需要三個,ca證書,伺服器證書,客戶端證書。

實現方法:

(1) 建立ca證書:

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

# openssl req -new -key private/ca.key -out private/ca.csr

# openssl x509 -req -days 365 -in private/ca.csr -signkey private/ca.key -out private/ca.crt

# echo face > serial

# touch index.txt

# openssl ca -out $/private/ca.crt -crldays 365 -config "$/conf/openssl.conf"

(2) 建立伺服器證書

# openssl genrsa -out server/server.key 2048

# openssl req -new -key server/server.key -out server/server.csr

# openssl ca -in server/server.csr -cert private/ca.crt -keyfile private/ca.key -out server/server.crt -config "$/conf/openssl.conf"

(3) 建立client證書

# mkdir -p $base/users/

# openssl genrsa -des3 -out $base/users/client.key 1024

# openssl req -new -key $base/users/client.key -out $base/users/client.csr

# openssl ca -in $base/users/client.csr -cert $base/private/ca.crt -keyfile $base/private/ca.key -out $base/users/client.crt -config "$/conf/openssl.conf"

# openssl pkcs12 -export -clcerts -in $base/users/client.crt -inkey $base/users/client.key -out $base/users/client.p12

過程中還會需要輸入一些註冊資訊。

在執行之前需要注意openssl.conf的配置檔案,如下:

[ ca ]  

default_ca = foo # the

default ca section

[ foo ]

ca cert

default_days = 365 # how long to certify for

default_crl_days= 30 # how long before next crl

default_md = md5 # message digest method to use

unique_subject = no # set to 'no' to allow creation of

# several ctificates with same subject.

policy = policy_any # default policy

[ policy_any ]

countryname = match

stateorprovincename = match

organizationname = match

organizationalunitname = match

localityname = optional

commonname = supplied

emailaddress = optional

(4) 最後需要修改下apache的配置檔案https-ssl.conf

sslengine on

sslverifyclient require sslverifydepth 10.

參考:

伺服器安裝apache伺服器

1.環境 centos7 2.鏈結伺服器 ssh username ip 3.安裝apache 4.設定apache在伺服器啟動時執行 5.在apache配置檔案中設定網域名稱 vi etc httpd conf httpd.conf,找到 servername 新增 網域名稱 80 儲存並退出。6...

搭建web伺服器 Apache伺服器

一.安裝apache 二.載入php解析模組,並指定模組處理檔案的型別 編輯httpd.conf 檔案 so檔案是linux下的c編譯的可執行檔案 這一項可以改為你真正願意放置專案檔案的磁碟 寫乙個指令碼測試一下,如果解析成功意味著php解析器載入成功 三.讓php處理資料庫 放到documentr...

移植apache伺服器

前些日子移植了boa伺服器,今天打算嘗試一下apache伺服器。本來是在ubuntu11.04上進行編譯,無奈庫檔案確實缺少很多,然而時間又緊。所以便在fodera9.0完成的編譯,關於ubuntu上的以後有時間在解決。這個網上還是挺好找的,我是用的開發板自帶的。來總體說一下步驟吧 apache原始...