Apache dường như đang sử dụng chứng chỉ hết hạn cũ mặc dù đã cài đặt chứng chỉ mới


15

Apache 2.2.3 / mod_ssl / CentOS 5.5 VPS

Chứng chỉ của chúng tôi đã hết hạn vào ngày 2011-10-06 và mặc dù chúng tôi dường như đã cài đặt cái mới một cách chính xác, duyệt đến trang web vẫn hiển thị chứng chỉ đã hết hạn! Tôi đã thử xóa bộ nhớ cache của trình duyệt và sử dụng một số trình duyệt khác nhau. Các dòng có liên quan từ tệp ssl.conf (Tôi đã loại trừ những người đã nhận xét.):

Listen 127.0.0.1:443
SSLSessionCache         shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout  300
# Note - I tried disabling SSLSessionCache with the "none" setting but it didn't help.
<VirtualHost 127.0.0.1:443>
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile /var/certs/gentlemanjoe.com/new2011/gentlemanjoe.com.crt
SSLCertificateKeyFile /var/certs/gentlemanjoe.com/new2011/gentlemanjoe.com.key
SSLCertificateChainFile /var/certs/gentlemanjoe.com/new2011/gd_bundle.crt
SetEnvIf User-Agent ".*MSIE.*" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
ServerAdmin webmaster@donotemailme.com
DocumentRoot /var/www/gentlemanjoe.com
ServerName gentlemanjoe.com
<Directory /var/www/gentlemanjoe.com>
    AllowOverride All
    Order deny,allow
    allow from all
</Directory>          
</VirtualHost>

Những điều tôi đã kiểm tra

Đầu tiên tôi đã thử chuyển các tệp chứng chỉ và khóa cũ sang một thư mục hoàn toàn khác để đảm bảo rằng Apache vẫn không lấy chúng bằng cách nào đó. Không có gì thay đổi. Để giải trí, tôi đã cố gắng tạm thời đổi tên các chứng chỉ và tệp chính mới và Apache đã phàn nàn và từ chối bắt đầu.

Sau đó, tôi đã cố gắng đảm bảo rằng mình không bị lừa bằng cách chỉnh sửa tập tin cấu hình sai. Sử dụng "định vị" tôi chỉ tìm thấy một tệp httpd.conf trong /etc/httpd/conf/httpd.conf. Tôi cũng đã sử dụng "định vị" để xác minh rằng chỉ có một tệp ssl.conf, /etc/httpd/conf.d/ssl.conf. Tệp chính là những gì tôi đã tạo bằng OpenSSL, theo hướng dẫn mà GoDaddy đã đưa ra để tạo CSR.

Tôi đã xác minh rằng tôi đang làm việc với đúng trang web bằng cách tải lên tệp test.html vào thư mục /var/www/genteldjoe.com và xác minh rằng tôi có thể duyệt đến nó. Nhưng nếu tôi cố gắng xem tệp thử nghiệm trong HTTPS, tôi sẽ nhận được cảnh báo hết hạn chứng chỉ tương tự.

Tôi xác nhận rằng bản thân chứng chỉ có ngày hết hạn đúng:

openssl x509 -in /var/certs/gentlemanjoe.com/new2011/gentlemanjoe.com.crt -noout -text

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            07:e7:49:69:97:96:16
        Signature Algorithm: sha1WithRSAEncryption
        Issuer: C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., OU=http://certificates.godaddy.com/repository, CN=Go Daddy Secure Certification Authority/serialNumber=07969287
        Validity
            Not Before: Oct 21 17:37:55 2011 GMT
            Not After : Oct  8 21:16:03 2013 GMT
        Subject: C=CA, ST=BC, L=Burnaby, O=Diamond Bailey Consolidated Commercial Services Ltd, OU= , CN=www.gentlemanjoe.com

Tôi đã thử khóa lại chứng chỉ tại GoDaddy bằng CSR mới và mọi thứ dường như hoạt động, nhưng tôi nhận được kết quả tương tự trong trình duyệt.

Manh mối số 1

Bất cứ khi nào tôi thực hiện "apachectl restart", tôi thấy điều này trong tệp error_log:

[Fri Oct 21 18:03:33 2011] [notice] SIGHUP received.  Attempting to restart
[Fri Oct 21 18:03:33 2011] [notice] Digest: generating secret for digest authentication ...
[Fri Oct 21 18:03:33 2011] [notice] Digest: done
[Fri Oct 21 18:03:33 2011] [info] APR LDAP: Built with OpenLDAP LDAP SDK
[Fri Oct 21 18:03:33 2011] [info] LDAP: SSL support available
[Fri Oct 21 18:03:33 2011] [info] Init: Seeding PRNG with 256 bytes of entropy
[Fri Oct 21 18:03:33 2011] [info] Init: Generating temporary RSA private keys (512/1024 bits)
[Fri Oct 21 18:03:33 2011] [info] Init: Generating temporary DH parameters (512/1024 bits)
[Fri Oct 21 18:03:33 2011] [info] Shared memory session cache initialised
[Fri Oct 21 18:03:33 2011] [info] Init: Initializing (virtual) servers for SSL
[Fri Oct 21 18:03:33 2011] [warn] RSA server certificate CommonName (CN) `www.gentlemanjoe.com' does NOT match server name!?
[Fri Oct 21 18:03:33 2011] [info] Server: Apache/2.2.3, Interface: mod_ssl/2.2.3, Library: OpenSSL/0.9.8e-fips-rhel5
[Fri Oct 21 18:03:34 2011] [notice] Apache/2.2.3 (CentOS) configured -- resuming normal operations
[Fri Oct 21 18:03:34 2011] [info] Server built: Aug 30 2010 12:28:40

Các kỹ thuật viên của GoDaddy nói với tôi rằng www và không phải www không quan trọng và tôi có xu hướng đồng ý, vì cảnh báo bảo mật trong trình duyệt của tôi không phàn nàn về tên máy chủ không khớp, mà là hết hạn , cho biết chứng chỉ cũ vẫn còn được tải bằng cách nào đó.

Manh mối có thể # 2

Tiêu đề phản hồi của Máy chủ HTTP cho http://gentmanjoe.com nói "Andromeda" thay vì "Apache". Điều này có vẻ kỳ lạ đối với tôi vì việc Google "Andromeda" của tôi bật lên một dự án loại máy chủ phương tiện, sẽ không được cài đặt trên máy chủ này (nhưng tôi không thể nói điều đó một cách chắc chắn vì tôi đã không thiết lập bất kỳ điều gì trong số này , quản trị viên / nhà phát triển thông thường đang trong kỳ nghỉ và tôi chỉ giúp một người bạn với trang web của anh ta.) Ngoài ra, tệp httpd.conf không chứa chuỗi "Andromeda" cho biết rằng nó đã không được sửa đổi để nhổ cái này ra. Vì vậy, nó có thể là nền tảng thương mại điện tử Magento mà anh ấy đang sử dụng, nhưng đâu sẽ là điểm thay thế tiêu đề phản hồi tiêu chuẩn của Apache?


Lỗi này là gì: Chứng chỉ máy chủ RSA CommonName (CN) `www.genteldjoe.com 'KHÔNG khớp với tên máy chủ!?
mdpc

Tôi không thực sự chắc chắn, tôi nghĩ rằng nó phàn nàn rằng www.genteldjoe.com không phù hợp với gentmanjoe.com, nhưng điều đó không giải thích tại sao trang web vẫn sử dụng chứng chỉ hết hạn. Nếu đó chỉ là một lỗi nhầm tên / tên máy chủ phổ biến, tôi sẽ không thấy điều đó được phản ánh trong cảnh báo bảo mật trình duyệt chứ? Chứng chỉ mới không nên xuất hiện khi hết hạn , nhưng với một cảnh báo khác về tên không đúng, phải không?
Jordan Rieger

Câu trả lời:


17

Một cái gì đó ở phía trước của Apache. Kiểm tra cấu hình đó:

Listen 127.0.0.1:443
....
<VirtualHost 127.0.0.1:443>

Chỉ nghe trên localhost, vì vậy khách hàng internet không truy cập trực tiếp vào dịch vụ này - họ có thể sẽ được ủy quyền.

Để kiểm tra sự tỉnh táo rằng Apache đang tải đúng chứng chỉ, hãy truy cập dịch vụ trực tiếp vào trình nghe của Apache: openssl s_client -connect 127.0.0.1:443 -showcerts

Không chắc chắn về tiêu đề Andromeda, vì vậy, hãy tìm quy trình : lsof -i.

Apache sẽ có 127.0.0.1:443, trong khi một số dịch vụ khác có 0.0.0.0:443(hoặc địa chỉ công khai của VPS :443) - đó là dịch vụ cần chứng chỉ mới.


Đúng! Cảm ơn bạn Shane, điều đó rất hợp lý. Cậu bé này là một khó khăn. Quá trình hóa ra là một máy chủ proxy có tên nginx, lắng nghe một địa chỉ IP mà tôi thậm chí không biết đã được liên kết với máy chủ và sau đó chuyển tiếp các yêu cầu HTTPS và HTTP đến Apache. Tôi không biết tại sao anh chàng cuối cùng nghĩ rằng đây là một ý tưởng tốt, nó dường như là một con lợn biểu diễn vô nghĩa. Và nginx yêu cầu tôi định dạng lại các chứng chỉ mà GoDaddy cung cấp để đặt chứng chỉ máy chủ và chuỗi quyền hạn trong một tệp theo một thứ tự nhất định. Dù sao, nó hoạt động ngay bây giờ! Cảm ơn bạn!
Jordan Rieger

2
@JordanRieger Thật tốt khi nghe! nginx thường được coi là nhẹ hơn và nhanh hơn Apache, vì vậy có thể có trường hợp nếu nó xử lý một số yêu cầu bên trong (giả sử, nội dung tĩnh) và chỉ chuyển một tập hợp con yêu cầu cụ thể cho Apache .. nhưng có vẻ như nó chỉ gửi mọi thứ cho Apache, vì vậy bạn đúng - chỉ là lãng phí hiệu năng.
Shane Madden

Trong trường hợp của chúng tôi, đó là AWS ELB.
Akshay

0

Một nguồn phổ biến của vấn đề này là nhiều phiên bản chạy của Apache. Các thay đổi cấu hình được chọn bởi một quy trình mà bạn (lại) bắt đầu nhưng yêu cầu được phục vụ bởi một quy trình cũ đang chạy với cấu hình cũ.

Dừng dịch vụ:

service apache2 stop

Kiểm tra nếu trang web vẫn có thể truy cập. Nếu có, thì bạn đã xác định được nguyên nhân.

Bây giờ chạy

ps aux | grep apache

Nó sẽ cung cấp cho bạn danh sách quá trình apache2 đang chạy và các PID của chúng. Giết tất cả chúng (Lưu ý, lệnh này cũng có thể trả về các quy trình không liên quan với Apache trong tên / người dùng của chúng, v.v. như Apache Tomcat, bạn có thể không muốn giết chúng.)

kill <pid>

Chạy lại ps aux và đảm bảo rằng các tiến trình không còn chạy nữa.

Kiểm tra lại nếu trang web có thể truy cập. Không nên như vậy.

Bây giờ bắt đầu dịch vụ apache

service apache2 start

Xác nhận rằng chứng chỉ mới đang được phục vụ.

Nếu bạn không muốn giết tiến trình, bạn có thể khởi động lại hệ thống. Nó sẽ có tác dụng tương tự.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.