1. 程式人生 > >Apache+OpenSSL實現證書伺服器提供HTTPS

Apache+OpenSSL實現證書伺服器提供HTTPS

http://hnlixf.iteye.com/blog/1771050

通過 Linux+Apache+OpenSSL 實現 SSL ( Secure Socket Layer )證書伺服器,提供安全的 HTTPS ( Hypertext Transfer Protocol over Secure Socket Layer )服務。 

安裝 SSL

1.       安裝 openssl

tar -zxvf openssl-0.9.8a.tar.gz

cd openssl-0.9.8a

./configure

make

make install

openssl 安裝在 /usr/local/ssl 目錄中

2.       安裝 apache

tar -zxvf httpd-2.0.55.tar.gz

cd httpd-2.0.55

./configure –prefix=/usr/local/apache –enable-ssl   –enable-rewrite –enable-so –with-ssl=/usr/local/ssl

make

make install

apache 安裝在 /usr/local/apache 目錄中

以上是通過原始碼方式安裝,最佳的安裝方式通過 rpm 安裝。先安裝 apache 的 rpm ,再安裝 openssl 的 rpm , openssl 可自動安裝到 apache 目錄中。

證書介紹

SSL 安全證書可以自己生成,也可以通過第三方的 CA ( Certification Authority )認證中心付費申請頒發。

SSL 安全證書包括:

1.       CA 證書,也叫根證書或中間級證書。單向認證的 https , CA 證書是可選的。主要目的是使證書構成一個證書鏈,以達到瀏覽器信任證書的目的。如果使用了 CA 證書,伺服器證書和客戶證書都使用 CA 證書來簽名。如果不安裝 CA 證書,瀏覽器預設認為是不安全的。

2.       伺服器證書。必選。通過伺服器私鑰,生成證書請求檔案 CSR ,再通過 CA 證書籤名生成伺服器證書。

3.       客戶證書。可選。如果有客戶證書,就是雙向認證的 HTTPS ,否則就是單向認證的 HTTPS 。生成步驟和伺服器證書類似。

上面幾種證書都可以自己生成。商業上,一般自己提供伺服器或客戶證書端的私鑰和證書請求 CSR ,向第三方機構付費申請得到通過 CA 證書籤名的伺服器證書和客戶證書。

生成證書

用 openssl 提供的工具 CA.sh 簽名證書,證書放在 /usr/local/apache2/conf/ssl.crt 目錄,先把工具拷貝過來:

cp /usr/share/ssl/misc/CA.sh /usr/local/apache2/conf/ssl.crt

 [ps:放哪裡都可以的]

1.       CA 證書(根證書 / 中間級證書)

是 CA 認證機構提供,如果是雙向認證則必選,否則是可選。通過 CA 證書,構成一個證書鏈,目的是使瀏覽器信任你的證書 。如果使用了 CA 證書,用它來簽名伺服器和客戶證書,以達到瀏覽器信任的目的。

  [ps:會自動生成demoCA資料夾]

自己生成 CA 證書步驟:

./CA.sh –newca

回車建立新檔案,輸入加密密碼,並填寫證書資訊:

Country Name (2 letter code) [AU]:CN

State or Province Name (full name) [Some-State]:Guangdong

Locality Name (eg, city) []:Shenzhen

Organization Name (eg, company) [Internet Widgits Pty Ltd]:xxx

Organizational Unit Name (eg, section) []:xxx

Common Name (eg, YOUR name) []:www.shenmiguo.com

Email Address []:[email protected]

Common Name 填入主機全稱是比較好的選擇。這個名稱必須與通過瀏覽器訪問您網站的 URL 完全相同,否則使用者會發現您伺服器證書的通用名與站點的名字不匹配,使用者就會懷疑您的證書的真實性。伺服器證書和客戶證書的 Common Name 應該和 CA 一致。

生成結果: demoCA/private/cakey.pem 是 CA 證書的私鑰檔案, demoCA/cacert.pem 是 CA 證書。

這樣就建好了一個 CA 伺服器,有了一個根證書的私鑰 cakey.pem 及一張根證書 cacert.pem, 現在就可以用 cacert.pem 來給伺服器證書或客戶證書籤名了。

我們規範一下 CA 證書的命名,把 CA 證書和金鑰重新命名一下:

cp demoCA/private/cakey.pem ca.key

cp demoCA/cacert.pem ca.crt

ca.key 是中間級證書私鑰, ca.crt 是中間級證書。

2.       伺服器證書

a)  生成伺服器私鑰

openssl genrsa -des3 -out server.key 1024

 [ps:這裡des3 生成的key是加密的,-des:表示生成的key是有密碼保護的(注:如果是將生成的key與server的證書一起使用,最好不需要密碼,就是不要這個引數,否則其它人就會在請求的時候每次都要求輸入密碼)]

[ps: 你可以通過如下的命令讓其不需要輸密碼:

openssl rsa -in server.key -out server.notneedpassword.key]

輸入加密密碼,用 128 位 rsa 演算法生成金鑰,得到 server.key 檔案。

b)  生成伺服器證書請求( CSR )

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

CSR ( Certificate Signing Request )是一個證書籤名請求,在申請證書之前,首先要在 WEB 伺服器上生成 CSR ,並將其提交給 CA 認證中心, CA 才能給您簽發 SSL 伺服器證書。可以這樣認為, CSR 就是一個在您伺服器上生成的證書。 CSR 主要包括以下內容:

Country Name (2 letter code) [AU]:CN

State or Province Name (full name) [Some-State]:Guangdong

Locality Name (eg, city) []:Shenzhen

Organization Name (eg, company) [Internet Widgits Pty Ltd]:xxx

Organizational Unit Name (eg, section) []:xxx

Common Name (eg, YOUR name) []:shenmiguo.com

Email Address []:[email protected]

Please enter the following ‘extra’ attributes

to be sent with your certificate request

A challenge password []:

An optional company name []:

Common Name 填入主機名和 CA 一致。

c)  自己生成伺服器證書

如果不使用 CA 證書籤名的話,用如下方式生成:

openssl req -x509 -days 1024 -key server.key -in server.csr > server.crt

用伺服器金鑰和證書請求生成證書 server.crt , -days 引數指明證書有效期,單位為天。商業上來說,伺服器證書是由通過第三方機構頒發的,該證書由第三方認證機構頒發的。

如果使用 CA 證書籤名,用 openssl 提供的工具 CA.sh 生成伺服器證書:

mv server.csr newreq.pem

./CA.sh -sign

mv newcert.pem server.crt

簽名證書後,可通過如下命令可檢視伺服器證書的內容:

openssl x509 -noout -text -in server.crt

可通過如下命令驗證伺服器證書:

openssl verify -CAfile ca.crt server.crt 

3.       客戶證書

客戶證書是可選的。如果有客戶證書,就是雙向認證 HTTPS ,否則就是單向認證 HTTPS 。

a)  生成客戶私鑰

openssl genrsa -des3 -out client.key 1024

b)  生成客戶證書籤名請求

openssl req -new -key client.key -out client.csr

c)  生成客戶證書(使用 CA 證書籤名)

openssl ca -in client.csr -out client.crt

d)  證書轉換成瀏覽器認識的格式

openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.pfx

4.       證書列表

如果使用雙向認證,就會有三個私鑰和三個證書。分別是 ca.key, ca.crt, server.key, server.crt, client.key, client.crt ,以及給瀏覽器的 client.pfx 。

如果使用有 CA 證書的單向認證,證書和私鑰就是 ca.key, ca.crt, server.key, server.crt 。

如果使用無 CA 證書的單向認證,證書和私鑰就是 server.key, server.crt 。

配置證書

Apache 規範的做法是將擴充套件的配置都配置在相應的 conf 檔案中, httpd.conf 直接 Include 包含各功能配置的 conf 檔案(如 php 相關配置叫 php.conf , ssl 相關配置叫 ssl.conf )。這樣的好處是配置易於管理和變更, httpd.conf 可以依然保持簡要易懂。

1.       配置 httpd.conf

<IfModule mod_ssl.c>

Include conf/ssl.conf

</IfModule>

2.       配置 ssl.conf

主要配置包括證書路徑和認證策略:

Listen 443   #https 埠

SSLRandomSeed startup builtin

SSLPassPhraseDialog builtin

SSLSessionCache dbm:logs/ssl_scache

SSLSessionCacheTimeout 300

SSLMutex default

<VirtualHost *:443>

ServerAdmin

DocumentRoot /usr/local/apache2/htdocs/

#DirectoryIndex digitalidCenter.htm

ServerName shenmiguo.com:443

ErrorLog logs/443-error_log

CustomLog /usr/local/apache2/logs/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

LogLevel info

<IfModule mod_ssl.c>

SSLEngine on

SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

SSLCertificateFile /usr/local/apache2/conf/ssl.crt/server.crt # 指定伺服器證書路徑

SSLCertificateKeyFile /usr/local/apache2/conf/ssl.crt/server.key # 伺服器證書私鑰路徑

SSLCertificateChainFile /usr/local/apache2/conf/ssl.crt/ca.crt #CA 中間級證書路徑

SSLCACertificatePath /usr/local/apache2/conf/ssl.crt # 客戶證書目錄 ( 雙向認證才用 )

SSLCACertificateFile /usr/local/apache2/conf/ssl.crt/client.crt # 客戶證書路徑 ( 雙向認證才用 )

SSLVerifyClient require # 強制客戶必須持有 SSL 證書請求

SSLVerifyDepth 10

</IfModule>

</VirtualHost>

更多 mod_ssl 配置選項說明可以見 apache 的文件:

http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/mod_ssl.html

3.       啟動 Apache

cd /usr/local/apache2/bin

./apachectl startssl

可修改 apachectl 指令碼,改成預設 ssl 方式啟動 apache 。 apachectl 指令碼中的:

start|stop|restart |graceful)

    $HTTPD -k $ARGV

    ERROR=$?

    ;;

startssl|sslstart|start-SSL)

    $HTTPD -k start -DSSL

    ERROR=$?

;;

修改為:

stop|graceful)

    $HTTPD -k $ARGV

    ERROR=$?

    ;;

restart )

    killall -9 httpd

    $HTTPD -k start -DSSL

    ;;

start |startssl|sslstart|start-SSL)

    $HTTPD -k start -DSSL

    ERROR=$?

    ;;

啟動的時候需要輸入 server.key 的密碼。可以通過伺服器私鑰解密儲存,重啟也無需輸入密碼:

openssl rsa -in server.key -out my-server.key

chmod 400 server.key

ssl.conf 中的配置變更成:

SSLCertificateKeyFile /usr/local/apache2/conf/ssl.crt/my-server.key # 伺服器證書解密私鑰路徑

FROM:http://blog.csdn.net/yuhaibao324/archive/2010/03/22/5405343.aspx

相關推薦

Apache+OpenSSL實現證書伺服器提供HTTPS

http://hnlixf.iteye.com/blog/1771050 通過 Linux+Apache+OpenSSL 實現 SSL ( Secure Socket Layer )證書伺服器,提供安全的 HTTPS ( Hypertext Transfer Proto

使用OpenSSL生成證書並配置Https

兩種 做的 class 令行 .net 基本 我們 服務端 mage 1、密鑰、證書請求、證書概要說明 在證書申請簽發過程中,客戶端涉及到密鑰、證書請求、證書這幾個概念。我們以申請證書的流程說明三者的關系。客戶端(相對於CA)在申請證書的時候,大體上有三個步驟: 第一步:

Nginx實現ssl一級、二級域名證書部署並用https訪問代理轉發服務器

www. log 所有 null rec write include cal direct 1. 規劃 域名 解析IP Nginx代理 htpps://www.devcult.com 47.88.10.155 htpps://auto.devcult.c

nginx實驗---lnmp實現多個虛擬主機,部署wordpress和phpmyadmin,並為後一個主機提供https

nginx php mariadb ca httpslnmp實現多個虛擬主機,部署wordpress和phpmyadmin,並為後一個主機提供https。 一、安裝nginx 方法一:編譯安裝1.下載nginx程序包,傳導至CentOS主機中,並解壓。2.進入解壓目錄3.~]# ./configure -

Apache mod_rewrite實現HTTP和HTTPS重定向跳轉

告訴 ace mod iter bing space tac lai contain 當你的站點使用了HTTPS之後,你可能會想把所有的HTTP請求(即端口80的請求),全部都重定向至HTTPS(即端口443)。這時候你可以用以下的方式來做到:(Apache mod_rew

OpenSSl生成SSL證書(支持https)

https openssl 一:環境與安裝說明 WIN7_64,Nginx服務器,OpenSSL_Win64。本人使用phpStudy集成開發環境,使用Nginx+PHP,支持瀏覽器https請求。 nginx下載地址:http://nginx.org/en/download.html

Apache配置實現https訪問

yum安裝Apache實現https訪 編譯安裝Apache實現https訪問 Apache實現https過程 Apache配置實現https訪問一、編譯安裝的Apache配置https訪問1、軟件環境HTTPS是以安全為目標的HTTP通道,簡單講是HTTP的安全版。谷歌已經制定了一項長遠的計劃,

liunx伺服器配置https檢測證書

雖然我是做php 開發,但是必須還是要掌握或者熟悉一些運維的一些事情,    進入正題, 在做專案的時候,甲方運維給到了一個crt還是cer 的證書來著,我這邊來配置https ,我是直接懵逼的, 瘋狂百度啥的 找各種途徑去解決問題, 我的伺服器配了一個寶塔面板(傻瓜式操

騰訊雲 CentOS Apache伺服器配置https

參考:https://www.cnblogs.com/bincoding/p/5952411.html 環境 CentOS 7.2 Apache 1.申請SSL證書 https://console.qcloud.com/s

使用openssl生成證書,用wolfssl實現ssl加密傳輸;

一、openssl生成證書 1、生成自簽名的ca證書,用來對伺服器和客戶端證書籤名; 1)生成ca私鑰 openssl genrsa -aes256 -out ca.key.pem 2048 2)生成自簽名ca證書 openssl req -key ca.key.pem -

阿里雲伺服器安裝https證書 centos + httpd + Symantec

一. 環境 centos7 阿里雲伺服器, httpd服務, 阿里雲免費的Symantec證書 阿里雲Symantec 有個免費版的證書, 具體怎麼申請可以去百度解決 二. 網上大部分的經驗貼都是要Apache 安裝mod_s

境外的伺服器安裝https證書後不能訪問

我有一個網站,中英文的,中文和英文分開的,中文放阿里雲國內伺服器上的,英文放阿里雲國外伺服器上的,同樣的程式碼,同樣的資料庫結構,區別就是資料庫裡一箇中文,一個英文,但國內上https很快就可以了,國外我弄了半天,瀏覽器直接訪問不了,network裡顯示Provisional headers are

tomcat部署https,用openssl簽發證書

常見字尾 cer,crt證書(不支援私鑰) 一般是簽署後CA頒發的證書,實質是CA用私鑰在申請者的公鑰上簽名 —–BEGIN CERTIFICATE—– csr:(Certificate Signing Request) 申請簽名的證書請求 –-BEG

SSH 登入伺服器 提供證書登入

Mac 環境下面-------- 遠端主機ip:HostIpAddress 如果沒有 key 話需要自己生成,或找同事索取. 1.生成key 如果本地有id_rsa和id_rsa.pub這兩個檔案就不要再生成一次了,否則之前已經設定好的網站就白弄了。 ssh-keygen&nbs

最新Https請求原理、OPenssl生成證書、nginx的https配置

Https請求原理 我們都知道HTTPS能夠加密資訊,以免敏感資訊被第三方獲取。所以很多銀行網站或電子郵箱等等安全級別較高的服務都會採用HTTPS協議。 HTTPS其實是有兩部分組成:HTTP + SSL / TLS,也就是在HTTP上又加了一層處理加密資訊

linux下利用openssl實現證書的頒發(詳細步驟)

1、首先需要安裝openssl,一個開源的實現加解密和證書的專業系統。在centos下可以利用yum安裝。 2、openssl的配置檔案是openssl.cnf,我們一般就是用預設配置就可以。如果證書有特殊要求的話,可以修改配置適應需求。這樣必須把相關的檔案放到配置檔

phpstudy整合環境Apache配置SSL證書支援https訪問

本文作者使用的整合環境為PHPstudy2018,具SSL證書獲得方法用多種這裡就贅述。只針對本文作者在阿里雲申請的免費SSL證書,做講解。 第一步:登入你的阿里雲帳號找到購買SSL證書,找不到的可以直接在阿里帳號上搜索。 如圖購買就行,無費用。 第二步:新增TXT域名解釋記錄值.

阿里雲伺服器配置https證書(免費版)

1.簽發證書 首先進入阿里雲官網>控制檯>安全(雲盾)>ssl證書(應用安全) 點選購買證書 依次點選:Symantec>增強型OV SSL>免費型DV SSL>立即購買 補全進度並填寫相關資訊  即可下載證書for Nginx

非同步OpenSSL實現HTTPS心得

  本文記錄在使用OpenSSL實現非同步式HTTPS中的一些心得體會。 1.關於握手 (1)如果沒有使用封裝庫,可以得到套接字描述符;而且非非同步系統,允許握手的阻塞,則直接使用API將套接字和OpenSSL繫結,從而完成SSL握手絕對是明智之選,可以省下

阿里雲伺服器配置SSL證書成功開啟Https(記錄趟過的各種坑)

環境: 阿里云云伺服器    Windows Server 2008 標準版 SP2 中文版(趁1212優惠買的一年的水貨配置) 阿里雲購買的域名(已備案、已解析) 伺服器:phpstudy:php5.4.45+Apache(因為是phpstudy