Linux

在 linux ubuntu 上的 apache 上設置 SSL

  • June 28, 2012

我正在嘗試讓 SSL 在我的 apache Web 伺服器上執行。

我沒有用於域設置的 DNS,這是一個問題嗎?

如何在我的 Web 伺服器上設置 SSL?

當我啟動 apache 時,它失敗了。

root@vannevar:/etc/apache2/ssl# service apache2 start
* Starting web server apache2                                                                                                                         Action 'start' failed.
The Apache error log may have more information.

日誌統計它無法讀取證書。

[Thu Jun 28 15:01:02 2012] [error] Init: Unable to read server certificate from file /etc/apache2/ssl/www.example.com.csr
[Thu Jun 28 15:01:02 2012] [error] SSL Library Error: 218529960 error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
[Thu Jun 28 15:01:02 2012] [error] SSL Library Error: 218595386 error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error

的內容/etc/apache2/httpd.conf

ServerName [SERVERIP]

的內容/etc/apache2/ports.conf

# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default
# This is also true if you have upgraded from before 2.2.9-3 (i.e. from
# Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and
# README.Debian.gz

NameVirtualHost [SERVERIP]:443
NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
   # If you add NameVirtualHost *:443 here, you will also have to change
   # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
   # to <VirtualHost *:443>
   # Server Name Indication for SSL named virtual hosts is currently not
   # supported by MSIE on Windows XP.
   Listen 443
</IfModule>

<IfModule mod_gnutls.c>
   Listen 443
</IfModule>

的內容/etc/apache2/sites-available/www.example.com

<VirtualHost *:80>
    ServerAdmin admin@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /srv/sites/example.com/public/
    ErrorLog /srv/sites/example.com/logs/error.log
    CustomLog /srv/sites/example.com/logs/access.log combined
</VirtualHost>

<VirtualHost [SERVERIP]:443>
    SSLEngine On
    SSLCertificateFile /etc/apache2/ssl/www.example.com.csr
    SSLCertificateKeyFile /etc/apache2/ssl/www.example.com.key
    SSLCACertificateFile /etc/apache2/ssl/comodo.crt

    ServerAdmin admin@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /srv/sites/example.com/public/
    ErrorLog /srv/sites/example.com/logs/error.log
    CustomLog /srv/sites/example.com/logs/access.log combined
</VirtualHost>

更新:

在dreamhost(我正在嘗試退出)中,我已經有一個帶有ssl / https的域,我可以在dreamhost管理員證書、私鑰和中間證書中看到三個密鑰。我可以用這些做點什麼嗎?我可以看到dreamhost正在使用comodo,我的網站說它的PositiveSSL所以……在comodo的網站上有根證書中間證書。這五個證書和openssl req -new -days 365 -nodes -keyout www.mydomain.com.key -out www.mydomain.com.csr命令創建的兩個有什麼關係?這兩個正在請求實際的證書?

我意識到 apache 的錯誤是指/etc/apache2/sites-available/www.example/com我弄亂了文件類型的文件,因為SSLCertificateFile /etc/apache2/ssl/www.example.com.csr它應該是.crt根據linode 文件

更新 2

所以我進入dreamhost並將密鑰複製到以下文件並映射以下

certificate => dh.crt
private key => dh.key
intermediate certificate => dh.cer

改變了連接/sites-available/example.com並且它工作了(apache工作)。這是否意味著當我連接我的域時 ssl 將起作用?

我不能在這裡投票,也不能發表評論,但阿德里安佩雷斯是對的,你沒有使用證書,而是證書籤名請求,在這一行:

SSLCertificateFile /etc/apache2/ssl/www.example.com.csr

需要將 CSR 發送到證書頒發機構以驗證您的身份並生成證書。您可以使用以下命令自行生成:

openssl x509 -req -days 365 -in www.example.com.csr -signkey www.example.com.key -out www.example.com.crt

並改變:

SSLCertificateFile /etc/apache2/ssl/www.example.com.csr

到:

SSLCertificateFile /etc/apache2/ssl/www.example.com.crt

但是,當您在瀏覽器中訪問該站點時,您會收到警告,因為這將是一個自簽名證書,因此不受信任。儘管如此,這是了解流程並測試站點是否正常執行的好方法。基本步驟是:

  1. 生成一個私鑰文件(只做一次,第一次設置站點時)
  2. 生成證書籤名請求
  3. 向證書頒發機構支付大量資金來驗證和頒發證書(Thwate 或類似的)
  4. 將密鑰放在伺服器上。

關於權限,請確保密鑰/crt 只能由 root (chmod 600) 讀取/寫入,否則 Apache 會抱怨。

希望這可以幫助

引用自:https://serverfault.com/questions/403186