在 linux ubuntu 上的 apache 上設置 SSL
我正在嘗試讓 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
但是,當您在瀏覽器中訪問該站點時,您會收到警告,因為這將是一個自簽名證書,因此不受信任。儘管如此,這是了解流程並測試站點是否正常執行的好方法。基本步驟是:
- 生成一個私鑰文件(只做一次,第一次設置站點時)
- 生成證書籤名請求
- 向證書頒發機構支付大量資金來驗證和頒發證書(Thwate 或類似的)
- 將密鑰放在伺服器上。
關於權限,請確保密鑰/crt 只能由 root (chmod 600) 讀取/寫入,否則 Apache 會抱怨。
希望這可以幫助