/* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License.
*/
/* _ _ * _ __ ___ ___ __| | ___ ___| | mod_ssl * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL * | | | | | | (_) | (_| | \__ \__ \ | * |_| |_| |_|\___/ \__,_|___|___/___/_| * |_____| * ssl_engine_log.c * Logging Facility
*/ /* ``The difference between a computer industry job and open-source software hacking is about 30 hours a week.''
-- Ralf S. Engelschall */ #include"ssl_private.h"
/* _________________________________________________________________ ** ** Logfile Support ** _________________________________________________________________
*/
staticconststruct { constchar *cpPattern; constchar *cpAnnotation;
} ssl_log_annotate[] = {
{ "*envelope*bad*decrypt*", "wrong pass phrase!?" },
{ "*CLIENT_HELLO*unknown*protocol*", "speaking not SSL to HTTPS port!?" },
{ "*CLIENT_HELLO*http*request*", "speaking HTTP to HTTPS port!?" },
{ "*SSL3_READ_BYTES:sslv3*alert*bad*certificate*", "Subject CN in certificate not server name or identical to CA!?" },
{ "*self signed certificate in certificate chain*", "Client certificate signed by CA not known to server?" },
{ "*peer did not return a certificate*", "No CAs known to server for verification?" },
{ "*no shared cipher*", "Too restrictive SSLCipherSuite or using DSA server certificate?" },
{ "*no start line*", "Bad file contents or format - or even just a forgotten SSLCertificateKeyFile?" },
{ "*bad password read*", "You entered an incorrect pass phrase!?" },
{ "*bad mac decode*", "Browser still remembered details of a re-created server certificate?" },
{ NULL, NULL }
};
staticconstchar *ssl_log_annotation(constchar *error)
{ int i = 0;
while (ssl_log_annotate[i].cpPattern != NULL
&& ap_strcmp_match(error, ssl_log_annotate[i].cpPattern) != 0)
i++;
return ssl_log_annotate[i].cpAnnotation;
}
apr_status_t ssl_die(server_rec *s)
{ if (s != NULL && s->is_virtual && s->error_fname != NULL)
ap_log_error(APLOG_MARK, APLOG_EMERG, 0, NULL, APLOGNO(02311) "Fatal error initialising mod_ssl, exiting. " "See %s for more information",
ap_server_root_relative(s->process->pool,
s->error_fname)); else
ap_log_error(APLOG_MARK, APLOG_EMERG, 0, NULL, APLOGNO(02312) "Fatal error initialising mod_ssl, exiting.");
/* * Prints the SSL library error information.
*/ void ssl_log_ssl_error(constchar *file, int line, int level, server_rec *s)
{ unsignedlong e; constchar *data; int flags;
while ((e = modssl_ERR_peek_error_data(&data, &flags))) { constchar *annotation; char err[256];
msglen = apr_vsnprintf(buf, sizeof buf, format, ap);
if (cert) {
BIO *bio = BIO_new(BIO_s_mem());
if (bio) { /* * Limit the maximum length of the subject and issuer DN strings * in the log message. 300 characters should always be sufficient * for holding both the timestamp, module name, pid etc. stuff * at the beginning of the line and the trailing information about * serial, notbefore and notafter.
*/ int maxdnlen = (HUGE_STRING_LEN - msglen - 300) / 2;
BIO_puts(bio, " [subject: ");
name = modssl_X509_NAME_to_string(p, X509_get_subject_name(cert),
maxdnlen); if (!strIsEmpty(name)) {
BIO_puts(bio, name);
} else {
BIO_puts(bio, "-empty-");
}
/* * Wrappers for ap_log_error/ap_log_cerror/ap_log_rerror which log additional * details of the X509 cert. For ssl_log_xerror, a pool needs to be passed in * as well (for temporary allocation of the cert's subject/issuer name strings, * in the other cases we use the connection and request pool, respectively).
*/ void ssl_log_xerror(constchar *file, int line, int level, apr_status_t rv,
apr_pool_t *ptemp, server_rec *s, X509 *cert, constchar *fmt, ...)
{ if (APLOG_IS_LEVEL(s,level)) {
va_list ap;
va_start(ap, fmt);
ssl_log_cert_error(file, line, level, rv, s, NULL, NULL, ptemp,
cert, fmt, ap);
va_end(ap);
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.