web-dev-qa-db-ja.com

LinuxubuntuのApacheでSSLを設定する

ApacheWebサーバーでSSLを実行しようとしています。

ドメイン設定用の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 [email protected]
     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 [email protected]
     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管理者証明書、秘密鍵、および中間証明書の3つの鍵を確認できます。これらで何かできますか? dreamhostがcomodoを使用していて、私のWebサイトがPositiveSSLと言っていることがわかります。したがって、comodoのWebサイトには、 ルート証明書中間証明書 があります。これらの5つの証明書は、openssl req -new -days 365 -nodes -keyout www.mydomain.com.key -out www.mydomain.com.csrコマンドによって作成された2つの証明書と何の関係がありますか?これらの2つは実際の証明書を要求していますか?

Apacheのエラーがファイル/etc/Apache2/sites-available/www.example/comを参照していることに気付きました。ここで、SSLCertificateFile /etc/Apache2/ssl/www.example.com.csrのファイルタイプをめちゃくちゃにしました。 linode docs によると.crtであるはずです。

アップデート2

そこで、dreamhostにアクセスして、次のファイルにキーをコピーし、次のファイルをマッピングしました。

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

/sites-available/example.comの接続を変更し、機能しました(Apacheが機能しました)。これは、ドメインに接続したときにsslが機能することを意味しますか?

2
ThomasReggi

ここで投票したりコメントしたりすることはできませんが、エイドリアンペレスは正しいです。あなたは証明書を使用していませんが、次の行で証明書署名要求を使用しています。

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. 秘密鍵ファイルを生成します(これは、サイトを初めてセットアップするときに1回だけ実行してください)
  2. 証明書署名要求を生成します
  3. 認証局に大量のお金を支払い、証明書を確認して発行します(Thwateまたは同様のもの)
  4. サーバーにキーを置きます。

パーミッションに関しては、key/crtがroot(chmod 600)によってのみ読み取り/書き込み可能であることを確認してください。そうでない場合、Apacheはうめき声を上げます。

お役に立てれば

3
Robbie Scourou

Javaプログラム Keystore Explorer をダウンロードして、証明書を開いて表示し、証明書が有効であることを確認できます。Apacheの場合、証明書が特定の形式 このWebサイト 必要な形式を説明するのに役立つ場合があります。これはPEMのようです。

0
djangofan

たぶん私は間違っていますが、ファイルwww.example.com.csrに証明書が含まれているかどうかを確認してください。通常、csr拡張子の付いたファイルには、CAで署名する要求が含まれています。

また、他のユーザーが言っているように権限やパスを確認することもできますが、問題はファイルの内容にあると思います。

チェックしてファイルを削除し、新しい空のファイルを作成して、証明書データをファイルに貼り付けることができます。

よろしく!

0
Adrian Perez

実際の証明書を取得するまでSSLを設定することはできません。あなたが持っているのは、認証局に証明書を発行させるために送信されるべき証明書の要求です。また、DNSが機能していなくてもサーバーを機能させることはできますが、クライアントはIP以外ではサーバーにアクセスできません。これにより、証明書がIPを検証できないため、警告が生成されます。

更新:あなたは今すべてをやったようです。他に問題がある場合は、DNSが設定されたら解決できます。

0
David Schwartz

証明書ファイルが読み取れない(または欠落している)ようです

[Thu Jun 28 15:01:02 2012] [error] Init: Unable to read server certificate from file /etc/Apache2/ssl/www.example.com.csr

権限/パスを確認しましたか?

また、DNSを設定する必要があります。そうしないと、証明書にエラーが表示されます(ブラウザによって異なります)。

0
MitziMeow