Apache SSL : 서버 인증서에 서버 이름과 일치하는 ID가 포함되어 있지 않습니다


21

apache2 웹 서버에서 SSL을 설정하려고하는데 전혀 작동하지 않는 것 같습니다.

openssl을 사용하여 인증서 파일을 작성하고 /etc/apache2/sites-available/default-ssl.conf올바르게 구성하는 자습서를 따라갔습니다 .

https로 웹 사이트를 열려고 할 때마다 보안 문제로 인해 브라우저 연결이 거부됩니다. 웹 사이트를 올바르게 구성하지 않았다고 말합니다.

내에서 /var/log/apache2/error.log내 서버 인증서가 서버 이름과 일치하는 ID를 포함하지 않는다라고 경고를 받고 있어요.

[Mon Apr 10 11:03:24.041813 2017] [mpm_prefork:notice] [pid 1222] AH00169: caught SIGTERM, shutting down
[Mon Apr 10 11:03:30.566578 2017] [ssl:warn] [pid 661] AH01909: 127.0.0.1:443:0 server certificate does NOT include an ID which matches the server name
[Mon Apr 10 11:03:31.579088 2017] [ssl:warn] [pid 1194] AH01909: 127.0.0.1:443:0 server certificate does NOT include an ID which matches the server name
[Mon Apr 10 11:03:31.592958 2017] [mpm_prefork:notice] [pid 1194] AH00163: Apache/2.4.25 (Raspbian) OpenSSL/1.0.2k configured -- resuming normal operations
[Mon Apr 10 11:03:31.593136 2017] [core:notice] [pid 1194] AH00094: Command line: '/usr/sbin/apache2'

이 문제를 해결하는 방법에 대한 아이디어가 있습니까? 감사합니다!


Apache 2.2 또는 2.4를 사용하고 있습니까? 2.2에서 2.4로 업그레이드 했는데이 오류가 발생했습니다. 내 경우에는 공용 서버가 아니며 내부 서버이므로 자체 서명 된 인증서로 추측됩니다.
svhyd

이 오류가 발생했을 때 공개 서버 (Debian 8)에서 Apache 2.2를 사용하고있었습니다. Let 's Encript로 전환 한 후 오류가 사라 졌으므로 자체 서명 된 인증서 인 것 같습니다.
pixelmusic

답변:


7

좋아, 나는이 게시물이 최근에 자주 조회되는 것을 보았으므로 많은 사람들이 내가했던 것과 같은 문제에 직면하고있는 것 같습니다. 그렇다면 도움이 될 것입니다.

웹 서버에 대한 SSL 인증을 만들기 위해 간단한 단계별 자습서를 수행했습니다. 많은 튜토리얼과 마찬가지로 필자가 수행 한 튜토리얼의 결과는 OpenSSL을 사용한 자체 서명 인증서였습니다. 그러나 자체 서명 한 것이 문제였습니다. 자체 서명 된 인증서로 인해 브라우저가 서버를 신뢰할 수 없습니다. 글쎄, 나도하지 않을 것입니다 ...

인증서는 외부의 신뢰할 수있는 인증 기관 (CA)에서 서명해야합니다. 그래서 Let 's Encrypt 는 우연히 당신을 위해 모든 작업을 수행하고 설정하기가 더 쉽고 최고는 절대적으로 무료입니다.

설치

1) OpenSSL을 사용하여 만든 이전 SSL 인증서 파일을 삭제하십시오.

2) 백 포트를 열어 데비안에서 certbot 클라이언트를 얻습니다. 이것이 완료되지 않은 소프트웨어에 구멍을 뚫을 것임을 알아야합니다! 수행중인 작업을 알고있을 때만 패키지를 설치하십시오.

echo 'deb http://ftp.debian.org/debian jessie-backports main' | sudo tee /etc/apt/sources.list.d/backports.list

3) 리눅스 시스템 업데이트

sudo apt-get update

4) certbot 설치

sudo apt-get install python-certbot-apache -t jessie-backports

5) 아파치 ServerName 및 ServerAlias ​​설정

sudo nano /etc/apache2/sites-available/000-default.conf

6) 아파치 설정 파일 편집

<VirtualHost *:80>
    . . .
    ServerName example.com
    ServerAlias www.example.com
    . . .
</VirtualHost>

7) 올바른 구문을 확인하십시오

sudo apache2ctl configtest

8) 설정 파일이 정상적으로 보이면 아파치 서버를 다시 시작하십시오

sudo systemctl restart apache2

9) certbot을 사용하여 인증서를 설정하고 화면의 지시를 따릅니다.

sudo certbot --apache

갱신

Let 's Encrypt의 모든 인증서는 3 개월 동안 유효합니다. 갱신하려면 수동으로 실행할 수 있습니다

sudo certbot renew

또는이 서비스를 크론 작업으로 자동화

sudo crontab -e

매주 월요일 오전 2시 30 분에 갱신을 요청하려면 다음 행을 입력하십시오.

. . .
30 2 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log

https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-debian-8 에서 더 자세한 자습서를 따를 수 있습니다.


localhost (로컬 네트워크의 가상 머신)에는 사용할 수 없습니다. 암호화를 사용하려면 도메인을 구입해야합니까?
lewis4u

1
예, 암호화가 작동하려면 등록 된 도메인을 통해 웹 서버에 액세스 할 수 있어야합니다.
pixelmusic

2

다른 SSL 오류가 표시되지 않고 httpd.conf 파일에서 'LogLevel debug'설정을 시도한 경우이 오류 메시지는 httpd.conf 파일에서 'Listen 443'이 누락되었음을 나타낼 수도 있습니다.


나는 아파치에게 443의 말을 듣는 것을 잊어 버렸습니다. 80의
Robert

1

그것들은 오류가 아니라 경고입니다. 기본 SSL 호스트가 정의되어 있고 인증서의 공통 이름이 클라이언트가 연결하는 데 사용하는 호스트 이름과 일치하는 한 정의 된 서버 이름과 일치하지 않는 인증서로 mod_ssl을 실행할 수 있습니다.

후자는 귀하의 경우에는 사실이 아닙니다. Jacob이 말했듯 이 CSR을 만들 때 올바른 호스트 이름을 일반 이름 (또는 별칭)으로 지정해야합니다 .

현재 인증서에있는 이름을 확인하려면 다음과 같이하십시오.

openssl s_client -showcerts -connect ${HOSTNAME}:443

머신에 여러 개의 인증서가 설치되어 있고 동일한 IP 주소로 제공되는 경우 :

openssl s_client -showcerts -connect ${HOSTIP}:443 -servername ${HOSTNAME}

($ {...} 값은 관련 값으로 바꿔야하는 자리 표시 자입니다).


(1) CSR의 CommonName에 서버 이름을 입력 해야 하지만 실제로 필요한지 (CA 확인 및 / 또는 복사 여부)는 CA에 따라 다릅니다. (2) openssl s_client리프 인증서의 주체 및 발급자 중 유일한 사람입니다. 당신은 여기없이 -showcerts, 그러나 2010 년경 이후 실제 CA 인증서 (및 유능한 사람들에 의한 DIY 인증서 )에 대해 당신이 볼 필요가있는 것은 주제가 아니라 SubjectAltName (SAN) 확장이며 당신이 필요로하는 것입니다openssl s_client -connect h:p [-servername h] | openssl x509 -noout -text
dave_thompson_085

최신 브라우저에서 인증서의 유효성을 올바르게 검사하려면 2018 년 중반부터 주체 대체 이름에 DNS 이름을 지정해야합니다.
symcbean

나는 2018 년에 어떤 변화가 있는지 모른다. Chrome은 2017 년 초부터 SAN (DNS 또는 IP의 경우 후자가 거의 사용되지 않음)을 요구했으며 Firefox 및 IE (여전히 현대적이라고 생각합니다)는 오늘날 필요하지 않습니다. 이전에 공개 CA 가 제공 했듯이 훨씬 더.
dave_thompson_085

0

자체 서명 된 인증서가 만료 된 최근에이 문제가 발생했습니다. 한 웹 사이트에서 새 인증서를 만드는 명령을 googled하고 방금 복사했습니다.

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/apache2/ssl/apache.crt

내 아파치 설정 파일에서 /etc/apache2/sites-available/default-ssl.conf. 인증서 파일 및 키 파일은 다음 파일 이름을 나타냅니다.

    SSLCertificateFile  /etc/apache2/ssl/apache.crt
    SSLCertificateKeyFile /etc/apache2/ssl/apache.key

따라서 내 경우에 여기에 표시되는 오류는 SSL 인증서를 만들 때 인증서 키 파일의 올바른 위치를 제공하면 쉽게 해결할 수 있습니다.

그래서, 여기에 올바르게 사용하고 입력 해야하는 명령이 있습니다.

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt

0

필자의 경우 각 관련 도메인에 대한 Apache ssl 구성 파일에서이 문제를 해결했습니다.

ServerName mydomain.com
ServerAlias www.mydomain.com

으로 :

ServerName www.mydomain.com
ServerAlias mydomain.com

내 인증서는 "mydomain.com"이 아닌 "www.mydomain.com"에 대한 것이므로

완전한 아파치 파일 :

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerAdmin noreply@mydomain.com
        ServerName www.mydomain.com
        ServerAlias mydomain.com
    DocumentRoot /home/mydomain.com/public_html
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|ico|png)$ \ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ \no-gzip dont-vary
SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

    <Directory />
        Options +FollowSymLinks
        AllowOverride All
    </Directory>
    <Directory /home/mydomain.com/public_html>
        Options -Indexes +FollowSymLinks +MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride All
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>


ErrorLog ${APACHE_LOG_DIR}/error.log

LogLevel warn
SSLCertificateFile /etc/letsencrypt/live/www.mydomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.mydomain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

0

특정 도메인의 conf 파일뿐만 아니라 ServerName 및 ServerAlias를 default-ssl 파일에 추가해야했습니다.
이것은 우리에게 성가신 오류를 제거했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.