mirror of
				https://github.com/drwetter/testssl.sh.git
				synced 2025-11-03 23:35:26 +01:00 
			
		
		
		
	Fix indentation
This PR fixes some indentation issues. The PR is a bit long, but it only makes changes to indentation (except for one comment line, where a trailing space character is removed).
This commit is contained in:
		
							
								
								
									
										404
									
								
								testssl.sh
									
									
									
									
									
								
							
							
						
						
									
										404
									
								
								testssl.sh
									
									
									
									
									
								
							@@ -444,35 +444,35 @@ CRITICAL=4
 | 
				
			|||||||
SEVERITY_LEVEL=0
 | 
					SEVERITY_LEVEL=0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
set_severity_level() {
 | 
					set_severity_level() {
 | 
				
			||||||
   local severity=$1
 | 
					     local severity=$1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   if [[ "$severity" == LOW ]]; then
 | 
					     if [[ "$severity" == LOW ]]; then
 | 
				
			||||||
           SEVERITY_LEVEL=$LOW
 | 
					          SEVERITY_LEVEL=$LOW
 | 
				
			||||||
   elif [[ "$severity" == MEDIUM ]]; then
 | 
					     elif [[ "$severity" == MEDIUM ]]; then
 | 
				
			||||||
           SEVERITY_LEVEL=$MEDIUM
 | 
					          SEVERITY_LEVEL=$MEDIUM
 | 
				
			||||||
   elif [[ "$severity" == HIGH ]]; then
 | 
					     elif [[ "$severity" == HIGH ]]; then
 | 
				
			||||||
           SEVERITY_LEVEL=$HIGH
 | 
					          SEVERITY_LEVEL=$HIGH
 | 
				
			||||||
   elif [[ "$severity" == CRITICAL ]]; then
 | 
					     elif [[ "$severity" == CRITICAL ]]; then
 | 
				
			||||||
           SEVERITY_LEVEL=$CRITICAL
 | 
					          SEVERITY_LEVEL=$CRITICAL
 | 
				
			||||||
   else
 | 
					     else
 | 
				
			||||||
        # WARN and FATAL will always be logged as the represent scanning problems
 | 
					          # WARN and FATAL will always be logged as the represent scanning problems
 | 
				
			||||||
        echo "Supported severity levels are LOW, MEDIUM, HIGH, CRITICAL!"
 | 
					          echo "Supported severity levels are LOW, MEDIUM, HIGH, CRITICAL!"
 | 
				
			||||||
        help 1
 | 
					          help 1
 | 
				
			||||||
   fi
 | 
					     fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
show_finding() {
 | 
					show_finding() {
 | 
				
			||||||
   local severity=$1
 | 
					     local severity=$1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ( [[ "$severity" == DEBUG ]] ) ||
 | 
					     ( [[ "$severity" == DEBUG ]] ) ||
 | 
				
			||||||
   ( [[ "$severity" == INFO ]] && [[ $SEVERITY_LEVEL -le $INFO ]] ) ||
 | 
					     ( [[ "$severity" == INFO ]] && [[ $SEVERITY_LEVEL -le $INFO ]] ) ||
 | 
				
			||||||
   ( [[ "$severity" == OK ]] && [[ $SEVERITY_LEVEL -le $OK ]] ) ||
 | 
					     ( [[ "$severity" == OK ]] && [[ $SEVERITY_LEVEL -le $OK ]] ) ||
 | 
				
			||||||
   ( [[ "$severity" == LOW ]] && [[ $SEVERITY_LEVEL -le $LOW ]] ) ||
 | 
					     ( [[ "$severity" == LOW ]] && [[ $SEVERITY_LEVEL -le $LOW ]] ) ||
 | 
				
			||||||
   ( [[ "$severity" == MEDIUM ]] && [[ $SEVERITY_LEVEL -le $MEDIUM ]] ) ||
 | 
					     ( [[ "$severity" == MEDIUM ]] && [[ $SEVERITY_LEVEL -le $MEDIUM ]] ) ||
 | 
				
			||||||
   ( [[ "$severity" == HIGH ]] && [[ $SEVERITY_LEVEL -le $HIGH ]] ) ||
 | 
					     ( [[ "$severity" == HIGH ]] && [[ $SEVERITY_LEVEL -le $HIGH ]] ) ||
 | 
				
			||||||
   ( [[ "$severity" == CRITICAL ]] && [[ $SEVERITY_LEVEL -le $CRITICAL ]] ) ||
 | 
					     ( [[ "$severity" == CRITICAL ]] && [[ $SEVERITY_LEVEL -le $CRITICAL ]] ) ||
 | 
				
			||||||
   ( [[ "$severity" == WARN ]] ) ||
 | 
					     ( [[ "$severity" == WARN ]] ) ||
 | 
				
			||||||
   ( [[ "$severity" == FATAL ]] )
 | 
					     ( [[ "$severity" == FATAL ]] )
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
########### Output functions
 | 
					########### Output functions
 | 
				
			||||||
@@ -771,10 +771,10 @@ fileout_json_section() {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fileout_section_header() {
 | 
					fileout_section_header() {
 | 
				
			||||||
    local str=""
 | 
					     local str=""
 | 
				
			||||||
    "$2" && str="$(fileout_section_footer false)"
 | 
					     "$2" && str="$(fileout_section_footer false)"
 | 
				
			||||||
    "$do_pretty_json" && FIRST_FINDING=true && (printf "%s%s\n" "$str" "$(fileout_json_section "$1")") >> "$JSONFILE"
 | 
					     "$do_pretty_json" && FIRST_FINDING=true && (printf "%s%s\n" "$str" "$(fileout_json_section "$1")") >> "$JSONFILE"
 | 
				
			||||||
    SECTION_FOOTER_NEEDED=true
 | 
					     SECTION_FOOTER_NEEDED=true
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# arg1: whether to end object too
 | 
					# arg1: whether to end object too
 | 
				
			||||||
@@ -792,8 +792,8 @@ fileout_json_print_parameter() {
 | 
				
			|||||||
     local spaces=""
 | 
					     local spaces=""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     "$do_json" && \
 | 
					     "$do_json" && \
 | 
				
			||||||
         spaces="              " || \
 | 
					          spaces="              " || \
 | 
				
			||||||
         spaces="                                "
 | 
					          spaces="                                "
 | 
				
			||||||
     if [[ -n "$value" ]] || [[ "$parameter" == finding ]]; then
 | 
					     if [[ -n "$value" ]] || [[ "$parameter" == finding ]]; then
 | 
				
			||||||
          printf "%s%s%s%s" "$spaces" "\"$parameter\"" "$filler" ": \"$value\"" >> "$JSONFILE"
 | 
					          printf "%s%s%s%s" "$spaces" "\"$parameter\"" "$filler" ": \"$value\"" >> "$JSONFILE"
 | 
				
			||||||
          "$not_last" && printf ",\n" >> "$JSONFILE"
 | 
					          "$not_last" && printf ",\n" >> "$JSONFILE"
 | 
				
			||||||
@@ -819,33 +819,33 @@ fileout_json_finding() {
 | 
				
			|||||||
          "$GIVE_HINTS" && fileout_json_print_parameter "hint" "         " "$hint" true
 | 
					          "$GIVE_HINTS" && fileout_json_print_parameter "hint" "         " "$hint" true
 | 
				
			||||||
          fileout_json_print_parameter "finding" "      " "$finding" false
 | 
					          fileout_json_print_parameter "finding" "      " "$finding" false
 | 
				
			||||||
          echo -e "\n          }" >> "$JSONFILE"
 | 
					          echo -e "\n          }" >> "$JSONFILE"
 | 
				
			||||||
    fi
 | 
					     fi
 | 
				
			||||||
    if "$do_pretty_json"; then
 | 
					     if "$do_pretty_json"; then
 | 
				
			||||||
        if [[ "$1" == service ]]; then
 | 
					          if [[ "$1" == service ]]; then
 | 
				
			||||||
            if [[ $SERVER_COUNTER -gt 1 ]]; then
 | 
					               if [[ $SERVER_COUNTER -gt 1 ]]; then
 | 
				
			||||||
                echo "          ," >> "$JSONFILE"
 | 
					                    echo "          ," >> "$JSONFILE"
 | 
				
			||||||
            fi
 | 
					               fi
 | 
				
			||||||
            target="$NODE"
 | 
					               target="$NODE"
 | 
				
			||||||
            $do_mx_all_ips && target="$URI"
 | 
					               $do_mx_all_ips && target="$URI"
 | 
				
			||||||
            echo -e "          {
 | 
					               echo -e "          {
 | 
				
			||||||
                    \"targetHost\"      : \"$target\",
 | 
					                    \"targetHost\"      : \"$target\",
 | 
				
			||||||
                    \"ip\"              : \"$NODEIP\",
 | 
					                    \"ip\"              : \"$NODEIP\",
 | 
				
			||||||
                    \"port\"            : \"$PORT\",
 | 
					                    \"port\"            : \"$PORT\",
 | 
				
			||||||
                    \"rDNS\"            : \"$rDNS\",
 | 
					                    \"rDNS\"            : \"$rDNS\",
 | 
				
			||||||
                    \"service\"         : \"$finding\"," >> "$JSONFILE"
 | 
					                    \"service\"         : \"$finding\"," >> "$JSONFILE"
 | 
				
			||||||
            $do_mx_all_ips && echo -e "                    \"hostname\"        : \"$NODE\","  >> "$JSONFILE"
 | 
					               $do_mx_all_ips && echo -e "                    \"hostname\"        : \"$NODE\","  >> "$JSONFILE"
 | 
				
			||||||
         else
 | 
					          else
 | 
				
			||||||
             ("$FIRST_FINDING" && echo -n "                            {" >> "$JSONFILE") || echo -n ",{" >> "$JSONFILE"
 | 
					               ("$FIRST_FINDING" && echo -n "                            {" >> "$JSONFILE") || echo -n ",{" >> "$JSONFILE"
 | 
				
			||||||
             echo -e -n "\n"  >> "$JSONFILE"
 | 
					               echo -e -n "\n"  >> "$JSONFILE"
 | 
				
			||||||
             fileout_json_print_parameter "id" "           " "$1" true
 | 
					               fileout_json_print_parameter "id" "           " "$1" true
 | 
				
			||||||
             fileout_json_print_parameter "severity" "     " "$2" true
 | 
					               fileout_json_print_parameter "severity" "     " "$2" true
 | 
				
			||||||
             fileout_json_print_parameter "cve" "          " "$cve" true
 | 
					               fileout_json_print_parameter "cve" "          " "$cve" true
 | 
				
			||||||
             fileout_json_print_parameter "cwe" "          " "$cwe" true
 | 
					               fileout_json_print_parameter "cwe" "          " "$cwe" true
 | 
				
			||||||
             "$GIVE_HINTS" && fileout_json_print_parameter "hint" "         " "$hint" true
 | 
					               "$GIVE_HINTS" && fileout_json_print_parameter "hint" "         " "$hint" true
 | 
				
			||||||
             fileout_json_print_parameter "finding" "      " "$finding" false
 | 
					               fileout_json_print_parameter "finding" "      " "$finding" false
 | 
				
			||||||
             echo -e -n "\n                           }" >> "$JSONFILE"
 | 
					               echo -e -n "\n                           }" >> "$JSONFILE"
 | 
				
			||||||
         fi
 | 
					          fi
 | 
				
			||||||
    fi
 | 
					     fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
##################### FILE FORMATTING #########################
 | 
					##################### FILE FORMATTING #########################
 | 
				
			||||||
@@ -854,10 +854,10 @@ fileout_pretty_json_banner() {
 | 
				
			|||||||
     local target
 | 
					     local target
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     if ! "$do_mass_testing"; then
 | 
					     if ! "$do_mass_testing"; then
 | 
				
			||||||
        [[ -z "$NODE" ]] && parse_hn_port "${URI}"
 | 
					          [[ -z "$NODE" ]] && parse_hn_port "${URI}"
 | 
				
			||||||
        # NODE, URL_PATH, PORT, IPADDR and IP46ADDR is set now  --> wrong place
 | 
					          # NODE, URL_PATH, PORT, IPADDR and IP46ADDR is set now  --> wrong place
 | 
				
			||||||
        target="$NODE"
 | 
					          target="$NODE"
 | 
				
			||||||
        $do_mx_all_ips && target="$URI"
 | 
					          $do_mx_all_ips && target="$URI"
 | 
				
			||||||
     fi
 | 
					     fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     echo -e "          \"Invocation\"  : \"$PROG_NAME $CMDLINE\",
 | 
					     echo -e "          \"Invocation\"  : \"$PROG_NAME $CMDLINE\",
 | 
				
			||||||
@@ -937,11 +937,11 @@ fileout() {
 | 
				
			|||||||
     local hint="$6"
 | 
					     local hint="$6"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     if ( "$do_pretty_json" && [[ "$1" == service ]] ) || show_finding "$severity"; then
 | 
					     if ( "$do_pretty_json" && [[ "$1" == service ]] ) || show_finding "$severity"; then
 | 
				
			||||||
         local finding=$(strip_lf "$(newline_to_spaces "$(strip_quote "$3")")")           # additional quotes will mess up screen output
 | 
					          local finding=$(strip_lf "$(newline_to_spaces "$(strip_quote "$3")")")           # additional quotes will mess up screen output
 | 
				
			||||||
         [[ -e "$JSONFILE" ]] && [[ ! -d "$JSONFILE" ]] && fileout_json_finding "$1" "$severity" "$finding" "$cve" "$cwe" "$hint"
 | 
					          [[ -e "$JSONFILE" ]] && [[ ! -d "$JSONFILE" ]] && fileout_json_finding "$1" "$severity" "$finding" "$cve" "$cwe" "$hint"
 | 
				
			||||||
         "$do_csv" && [[ -n "$CSVFILE" ]] && [[ ! -d "$CSVFILE" ]] && \
 | 
					          "$do_csv" && [[ -n "$CSVFILE" ]] && [[ ! -d "$CSVFILE" ]] && \
 | 
				
			||||||
               fileout_csv_finding "$1" "$NODE/$NODEIP" "$PORT" "$severity" "$finding" "$cve" "$cwe" "$hint"
 | 
					               fileout_csv_finding "$1" "$NODE/$NODEIP" "$PORT" "$severity" "$finding" "$cve" "$cwe" "$hint"
 | 
				
			||||||
     "$FIRST_FINDING" && FIRST_FINDING=false
 | 
					          "$FIRST_FINDING" && FIRST_FINDING=false
 | 
				
			||||||
     fi
 | 
					     fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1465,13 +1465,13 @@ out_row_aligned_max_width_by_entry() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
     resp="$(out_row_aligned_max_width "$text" "$spaces" "$max_width")"
 | 
					     resp="$(out_row_aligned_max_width "$text" "$spaces" "$max_width")"
 | 
				
			||||||
     while read -d " " entry; do
 | 
					     while read -d " " entry; do
 | 
				
			||||||
        if [[ -n "$entry" ]]; then
 | 
					          if [[ -n "$entry" ]]; then
 | 
				
			||||||
             $print_function "$entry"
 | 
					               $print_function "$entry"
 | 
				
			||||||
        elif [[ -n "$prev_entry" ]]; then
 | 
					          elif [[ -n "$prev_entry" ]]; then
 | 
				
			||||||
             outln; out " "
 | 
					               outln; out " "
 | 
				
			||||||
        fi
 | 
					          fi
 | 
				
			||||||
        out " "
 | 
					          out " "
 | 
				
			||||||
        prev_entry="$entry"
 | 
					          prev_entry="$entry"
 | 
				
			||||||
    done <<< "$resp"
 | 
					    done <<< "$resp"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1609,7 +1609,7 @@ http_get_header() {
 | 
				
			|||||||
          # assume the GET protocol we query is using http -- http_proxy is the $ENV not for the connection TO
 | 
					          # assume the GET protocol we query is using http -- http_proxy is the $ENV not for the connection TO
 | 
				
			||||||
          # the proxy, but for the protocol we query THROUGH the proxy
 | 
					          # the proxy, but for the protocol we query THROUGH the proxy
 | 
				
			||||||
          if [[ -z "$PROXY" ]]; then
 | 
					          if [[ -z "$PROXY" ]]; then
 | 
				
			||||||
                headers="$(wget --no-proxy -q -S -U $''"$useragent"'' -O /dev/null "$1" 2>&1)"
 | 
					               headers="$(wget --no-proxy -q -S -U $''"$useragent"'' -O /dev/null "$1" 2>&1)"
 | 
				
			||||||
          else
 | 
					          else
 | 
				
			||||||
               if [[ -z "$http_proxy" ]]; then
 | 
					               if [[ -z "$http_proxy" ]]; then
 | 
				
			||||||
                    headers="$(http_proxy=http://$PROXYIP:$PROXYPORT wget -q -S  -U $''"$useragent"'' -O /dev/null "$1" 2>&1)"
 | 
					                    headers="$(http_proxy=http://$PROXYIP:$PROXYPORT wget -q -S  -U $''"$useragent"'' -O /dev/null "$1" 2>&1)"
 | 
				
			||||||
@@ -3636,7 +3636,7 @@ run_cipher_match(){
 | 
				
			|||||||
                              kx[i]="${kx[i]} $dhlen"
 | 
					                              kx[i]="${kx[i]} $dhlen"
 | 
				
			||||||
                         fi
 | 
					                         fi
 | 
				
			||||||
                         "$SHOW_SIGALGO" && [[ -r "$HOSTCERT" ]] && \
 | 
					                         "$SHOW_SIGALGO" && [[ -r "$HOSTCERT" ]] && \
 | 
				
			||||||
                               sigalg[i]="$(read_sigalg_from_file "$HOSTCERT")"
 | 
					                              sigalg[i]="$(read_sigalg_from_file "$HOSTCERT")"
 | 
				
			||||||
                    done
 | 
					                    done
 | 
				
			||||||
               done
 | 
					               done
 | 
				
			||||||
          done
 | 
					          done
 | 
				
			||||||
@@ -4860,7 +4860,7 @@ add_tls_offered() {
 | 
				
			|||||||
          # the ":" is mandatory here (and @ other places), otherwise e.g. tls1 will match tls1_2
 | 
					          # the ":" is mandatory here (and @ other places), otherwise e.g. tls1 will match tls1_2
 | 
				
			||||||
          :
 | 
					          :
 | 
				
			||||||
     else
 | 
					     else
 | 
				
			||||||
           PROTOS_OFFERED+="${1}:$2 "
 | 
					          PROTOS_OFFERED+="${1}:$2 "
 | 
				
			||||||
     fi
 | 
					     fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -5325,23 +5325,23 @@ run_protocols() {
 | 
				
			|||||||
                    fi
 | 
					                    fi
 | 
				
			||||||
               fi
 | 
					               fi
 | 
				
			||||||
               ;;
 | 
					               ;;
 | 
				
			||||||
           3)  out "not offered, "
 | 
					          3)   out "not offered, "
 | 
				
			||||||
               fileout "$jsonID" "INFO" "not offered"
 | 
					               fileout "$jsonID" "INFO" "not offered"
 | 
				
			||||||
               add_tls_offered tls1_2 no
 | 
					               add_tls_offered tls1_2 no
 | 
				
			||||||
               pr_warning "TLS downgraded to STARTTLS plaintext"; outln
 | 
					               pr_warning "TLS downgraded to STARTTLS plaintext"; outln
 | 
				
			||||||
               fileout "$jsonID" "WARN" "TLS downgraded to STARTTLS plaintext"
 | 
					               fileout "$jsonID" "WARN" "TLS downgraded to STARTTLS plaintext"
 | 
				
			||||||
               ;;
 | 
					               ;;
 | 
				
			||||||
           4)  out "likely "; pr_svrty_medium "not offered, "
 | 
					          4)   out "likely "; pr_svrty_medium "not offered, "
 | 
				
			||||||
               fileout "$jsonID" "MEDIUM" "not offered"
 | 
					               fileout "$jsonID" "MEDIUM" "not offered"
 | 
				
			||||||
               add_tls_offered tls1_2 no
 | 
					               add_tls_offered tls1_2 no
 | 
				
			||||||
               pr_warning "received 4xx/5xx after STARTTLS handshake"; outln "$debug_recomm"
 | 
					               pr_warning "received 4xx/5xx after STARTTLS handshake"; outln "$debug_recomm"
 | 
				
			||||||
               fileout "$jsonID" "WARN" "received 4xx/5xx after STARTTLS handshake${debug_recomm}"
 | 
					               fileout "$jsonID" "WARN" "received 4xx/5xx after STARTTLS handshake${debug_recomm}"
 | 
				
			||||||
               ;;
 | 
					               ;;
 | 
				
			||||||
           5)  outln "$supported_no_ciph1"                  # protocol detected, but no cipher --> comes from run_prototest_openssl
 | 
					          5)   outln "$supported_no_ciph1"                  # protocol detected, but no cipher --> comes from run_prototest_openssl
 | 
				
			||||||
               fileout "$jsonID" "INFO" "$supported_no_ciph1"
 | 
					               fileout "$jsonID" "INFO" "$supported_no_ciph1"
 | 
				
			||||||
               add_tls_offered tls1_2 yes
 | 
					               add_tls_offered tls1_2 yes
 | 
				
			||||||
               ;;
 | 
					               ;;
 | 
				
			||||||
           7)  if "$using_sockets" ; then
 | 
					          7)   if "$using_sockets" ; then
 | 
				
			||||||
                    # can only happen in debug mode
 | 
					                    # can only happen in debug mode
 | 
				
			||||||
                    pr_warning "strange reply, maybe a client side problem with TLS 1.2"; outln "$debug_recomm"
 | 
					                    pr_warning "strange reply, maybe a client side problem with TLS 1.2"; outln "$debug_recomm"
 | 
				
			||||||
               else
 | 
					               else
 | 
				
			||||||
@@ -6537,7 +6537,7 @@ run_server_preference() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
          for i in 1 2 3 4 5 6; do
 | 
					          for i in 1 2 3 4 5 6; do
 | 
				
			||||||
               if [[ -n "${cipher[i]}" ]]; then                                      # cipher not empty
 | 
					               if [[ -n "${cipher[i]}" ]]; then                                      # cipher not empty
 | 
				
			||||||
                     if [[ -z "$prev_cipher" ]] || [[ "$prev_cipher" != "${cipher[i]}" ]]; then
 | 
					                    if [[ -z "$prev_cipher" ]] || [[ "$prev_cipher" != "${cipher[i]}" ]]; then
 | 
				
			||||||
                         [[ -n "$prev_cipher" ]] && outln
 | 
					                         [[ -n "$prev_cipher" ]] && outln
 | 
				
			||||||
                         str_len=${#cipher[i]}
 | 
					                         str_len=${#cipher[i]}
 | 
				
			||||||
                         out "     "
 | 
					                         out "     "
 | 
				
			||||||
@@ -6633,11 +6633,11 @@ check_tls12_pref() {
 | 
				
			|||||||
               fi
 | 
					               fi
 | 
				
			||||||
          done
 | 
					          done
 | 
				
			||||||
          if "$FAST" && [[ $nr_ciphers_found_r2 -ne 1 ]]; then
 | 
					          if "$FAST" && [[ $nr_ciphers_found_r2 -ne 1 ]]; then
 | 
				
			||||||
                prln_fixme "something weird happened around line $((LINENO - 14))"
 | 
					               prln_fixme "something weird happened around line $((LINENO - 14))"
 | 
				
			||||||
                return 1
 | 
					               return 1
 | 
				
			||||||
          elif ! "$FAST" && [[ $nr_ciphers_found_r2 -ne $nr_ciphers_found_r1 ]]; then
 | 
					          elif ! "$FAST" && [[ $nr_ciphers_found_r2 -ne $nr_ciphers_found_r1 ]]; then
 | 
				
			||||||
                prln_fixme "something weird happened around line $((LINENO - 16))"
 | 
					               prln_fixme "something weird happened around line $((LINENO - 16))"
 | 
				
			||||||
                return 1
 | 
					               return 1
 | 
				
			||||||
          fi
 | 
					          fi
 | 
				
			||||||
     fi
 | 
					     fi
 | 
				
			||||||
     tm_out "$order"
 | 
					     tm_out "$order"
 | 
				
			||||||
@@ -6855,8 +6855,8 @@ get_host_cert() {
 | 
				
			|||||||
          return 0
 | 
					          return 0
 | 
				
			||||||
     else
 | 
					     else
 | 
				
			||||||
          if [[ -z "$1" ]]; then
 | 
					          if [[ -z "$1" ]]; then
 | 
				
			||||||
                prln_warning "could not retrieve host certificate!"
 | 
					               prln_warning "could not retrieve host certificate!"
 | 
				
			||||||
                fileout "host_certificate_Problem" "WARN" "Could not retrieve host certificate!"
 | 
					               fileout "host_certificate_Problem" "WARN" "Could not retrieve host certificate!"
 | 
				
			||||||
          fi
 | 
					          fi
 | 
				
			||||||
          return 1
 | 
					          return 1
 | 
				
			||||||
     fi
 | 
					     fi
 | 
				
			||||||
@@ -6910,7 +6910,7 @@ determine_trust() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
     case $OSSL_VER_MAJOR.$OSSL_VER_MINOR in
 | 
					     case $OSSL_VER_MAJOR.$OSSL_VER_MINOR in
 | 
				
			||||||
          1.0.2|1.1.0|1.1.1|2.[1-9].*|3.*)           # 2.x is LibreSSL. 2.1.1 was tested to work, below is not sure
 | 
					          1.0.2|1.1.0|1.1.1|2.[1-9].*|3.*)           # 2.x is LibreSSL. 2.1.1 was tested to work, below is not sure
 | 
				
			||||||
              :
 | 
					               :
 | 
				
			||||||
          ;;
 | 
					          ;;
 | 
				
			||||||
          *)   addtl_warning="Your $OPENSSL <= 1.0.2 might be too unreliable to determine trust"
 | 
					          *)   addtl_warning="Your $OPENSSL <= 1.0.2 might be too unreliable to determine trust"
 | 
				
			||||||
               fileout "${jsonID}${json_postfix}" "WARN" "$addtl_warning"
 | 
					               fileout "${jsonID}${json_postfix}" "WARN" "$addtl_warning"
 | 
				
			||||||
@@ -7201,42 +7201,42 @@ extract_certificates() {
 | 
				
			|||||||
     fi
 | 
					     fi
 | 
				
			||||||
     [[ -s level0.crt ]] && nrsaved=$(count_words "$(echo level?.crt 2>/dev/null)")
 | 
					     [[ -s level0.crt ]] && nrsaved=$(count_words "$(echo level?.crt 2>/dev/null)")
 | 
				
			||||||
     if [[ $nrsaved -eq 0 ]]; then
 | 
					     if [[ $nrsaved -eq 0 ]]; then
 | 
				
			||||||
         success=1
 | 
					          success=1
 | 
				
			||||||
     else
 | 
					     else
 | 
				
			||||||
         success=0
 | 
					          success=0
 | 
				
			||||||
         CERTIFICATE_LIST_ORDERING_PROBLEM=false
 | 
					          CERTIFICATE_LIST_ORDERING_PROBLEM=false
 | 
				
			||||||
         mv level0.crt $HOSTCERT
 | 
					          mv level0.crt $HOSTCERT
 | 
				
			||||||
         if [[ $nrsaved -eq 1 ]]; then
 | 
					          if [[ $nrsaved -eq 1 ]]; then
 | 
				
			||||||
             echo "" > $TEMPDIR/intermediatecerts.pem
 | 
					               echo "" > $TEMPDIR/intermediatecerts.pem
 | 
				
			||||||
         else
 | 
					          else
 | 
				
			||||||
             cat level?.crt > $TEMPDIR/intermediatecerts.pem
 | 
					               cat level?.crt > $TEMPDIR/intermediatecerts.pem
 | 
				
			||||||
             issuerDN="$($OPENSSL x509 -in $HOSTCERT -noout -issuer 2>/dev/null)"
 | 
					               issuerDN="$($OPENSSL x509 -in $HOSTCERT -noout -issuer 2>/dev/null)"
 | 
				
			||||||
             issuerDN="${issuerDN:8}"
 | 
					               issuerDN="${issuerDN:8}"
 | 
				
			||||||
             previssuerDN="$issuerDN"
 | 
					               previssuerDN="$issuerDN"
 | 
				
			||||||
             # The second certificate (level1.crt) SHOULD be issued to the CA
 | 
					               # The second certificate (level1.crt) SHOULD be issued to the CA
 | 
				
			||||||
             # that issued the server's certificate. But, according to RFC 8446
 | 
					               # that issued the server's certificate. But, according to RFC 8446
 | 
				
			||||||
             # clients SHOULD be prepared to handle cases in which the server
 | 
					               # clients SHOULD be prepared to handle cases in which the server
 | 
				
			||||||
             # does not order the certificates correctly.
 | 
					               # does not order the certificates correctly.
 | 
				
			||||||
             for (( i=1; i < nrsaved; i++ )); do
 | 
					               for (( i=1; i < nrsaved; i++ )); do
 | 
				
			||||||
                  CAsubjectDN="$($OPENSSL x509 -in "level$i.crt" -noout -subject  2>/dev/null)"
 | 
					                    CAsubjectDN="$($OPENSSL x509 -in "level$i.crt" -noout -subject  2>/dev/null)"
 | 
				
			||||||
                  if [[ "${CAsubjectDN:9}" == "$issuerDN" ]]; then
 | 
					                    if [[ "${CAsubjectDN:9}" == "$issuerDN" ]]; then
 | 
				
			||||||
                       cp "level$i.crt" $TEMPDIR/hostcert_issuer.pem
 | 
					                         cp "level$i.crt" $TEMPDIR/hostcert_issuer.pem
 | 
				
			||||||
                       issuerDN="" # set to empty to prevent further matches
 | 
					                         issuerDN="" # set to empty to prevent further matches
 | 
				
			||||||
                  fi
 | 
					                    fi
 | 
				
			||||||
                  [[ "${CAsubjectDN:9}" != "$previssuerDN" ]] && CERTIFICATE_LIST_ORDERING_PROBLEM=true
 | 
					                    [[ "${CAsubjectDN:9}" != "$previssuerDN" ]] && CERTIFICATE_LIST_ORDERING_PROBLEM=true
 | 
				
			||||||
                  "$CERTIFICATE_LIST_ORDERING_PROBLEM" && [[ -z "$issuerDN" ]] && break
 | 
					                    "$CERTIFICATE_LIST_ORDERING_PROBLEM" && [[ -z "$issuerDN" ]] && break
 | 
				
			||||||
                  previssuerDN="$($OPENSSL x509 -in "level$i.crt" -noout -issuer  2>/dev/null)"
 | 
					                    previssuerDN="$($OPENSSL x509 -in "level$i.crt" -noout -issuer  2>/dev/null)"
 | 
				
			||||||
                  previssuerDN="${previssuerDN:8}"
 | 
					                    previssuerDN="${previssuerDN:8}"
 | 
				
			||||||
             done
 | 
					               done
 | 
				
			||||||
             # This should never happen, but if more than one certificate was
 | 
					               # This should never happen, but if more than one certificate was
 | 
				
			||||||
             # provided and none of them belong to the CA that issued the
 | 
					               # provided and none of them belong to the CA that issued the
 | 
				
			||||||
             # server's certificate, then the extra certificates should just
 | 
					               # server's certificate, then the extra certificates should just
 | 
				
			||||||
             # be deleted. There is code elsewhere that assumes that if
 | 
					               # be deleted. There is code elsewhere that assumes that if
 | 
				
			||||||
             # $TEMPDIR/intermediatecerts.pem is non-empty, then
 | 
					               # $TEMPDIR/intermediatecerts.pem is non-empty, then
 | 
				
			||||||
             # $TEMPDIR/hostcert_issuer.pem is also present.
 | 
					               # $TEMPDIR/hostcert_issuer.pem is also present.
 | 
				
			||||||
             [[ -n "$issuerDN" ]] && echo "" > $TEMPDIR/intermediatecerts.pem
 | 
					               [[ -n "$issuerDN" ]] && echo "" > $TEMPDIR/intermediatecerts.pem
 | 
				
			||||||
             rm level?.crt
 | 
					               rm level?.crt
 | 
				
			||||||
         fi
 | 
					          fi
 | 
				
			||||||
     fi
 | 
					     fi
 | 
				
			||||||
     cd "$savedir"
 | 
					     cd "$savedir"
 | 
				
			||||||
     return $success
 | 
					     return $success
 | 
				
			||||||
@@ -7265,15 +7265,15 @@ extract_stapled_ocsp() {
 | 
				
			|||||||
          ocsp="$(strip_spaces "$(newline_to_spaces "$ocsp")")"
 | 
					          ocsp="$(strip_spaces "$(newline_to_spaces "$ocsp")")"
 | 
				
			||||||
          ocsp="${ocsp:8}"
 | 
					          ocsp="${ocsp:8}"
 | 
				
			||||||
     elif [[ "$response" =~ "TLS server extension \"status request\" (id=5), len=" ]]; then
 | 
					     elif [[ "$response" =~ "TLS server extension \"status request\" (id=5), len=" ]]; then
 | 
				
			||||||
            # This is OpenSSL 1.1.1 and the response is TLS 1.3.
 | 
					          # This is OpenSSL 1.1.1 and the response is TLS 1.3.
 | 
				
			||||||
            ocsp="${response##*TLS server extension \"status request\" (id=5), len=}"
 | 
					          ocsp="${response##*TLS server extension \"status request\" (id=5), len=}"
 | 
				
			||||||
            ocsp="${ocsp%%<<<*}"
 | 
					          ocsp="${ocsp%%<<<*}"
 | 
				
			||||||
            tmp="${ocsp%%[!0-9]*}"
 | 
					          tmp="${ocsp%%[!0-9]*}"
 | 
				
			||||||
            ocsp="${ocsp#$tmp}"
 | 
					          ocsp="${ocsp#$tmp}"
 | 
				
			||||||
            ocsp_len=2*$tmp
 | 
					          ocsp_len=2*$tmp
 | 
				
			||||||
            ocsp="$(awk ' { print $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 $16 $17 } ' <<< "$ocsp" | sed 's/-//')"
 | 
					          ocsp="$(awk ' { print $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 $16 $17 } ' <<< "$ocsp" | sed 's/-//')"
 | 
				
			||||||
            ocsp="$(strip_spaces "$(newline_to_spaces "$ocsp")")"
 | 
					          ocsp="$(strip_spaces "$(newline_to_spaces "$ocsp")")"
 | 
				
			||||||
            ocsp="${ocsp:0:ocsp_len}"
 | 
					          ocsp="${ocsp:0:ocsp_len}"
 | 
				
			||||||
     else
 | 
					     else
 | 
				
			||||||
          return 0
 | 
					          return 0
 | 
				
			||||||
     fi
 | 
					     fi
 | 
				
			||||||
@@ -7354,9 +7354,9 @@ get_server_certificate() {
 | 
				
			|||||||
     "$HAS_NPN" && [[ -z "$STARTTLS" ]] && npn_params="-nextprotoneg \"$NPN_PROTOs\""
 | 
					     "$HAS_NPN" && [[ -z "$STARTTLS" ]] && npn_params="-nextprotoneg \"$NPN_PROTOs\""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     if [[ -n "$2" ]]; then
 | 
					     if [[ -n "$2" ]]; then
 | 
				
			||||||
         protocols_to_try="$2"
 | 
					          protocols_to_try="$2"
 | 
				
			||||||
     else
 | 
					     else
 | 
				
			||||||
         protocols_to_try="tls1_2 tls1_1 tls1 ssl3"
 | 
					          protocols_to_try="tls1_2 tls1_1 tls1 ssl3"
 | 
				
			||||||
     fi
 | 
					     fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     # throwing 1st every cipher/protocol at the server to know what works
 | 
					     # throwing 1st every cipher/protocol at the server to know what works
 | 
				
			||||||
@@ -7405,7 +7405,7 @@ get_server_certificate() {
 | 
				
			|||||||
               [[ $ret -eq 2 ]] && success=0
 | 
					               [[ $ret -eq 2 ]] && success=0
 | 
				
			||||||
               if [[ $success -eq 7 ]]; then
 | 
					               if [[ $success -eq 7 ]]; then
 | 
				
			||||||
                    if [ -z "$1" ]; then
 | 
					                    if [ -z "$1" ]; then
 | 
				
			||||||
                        prln_warning "Strange, no SSL/TLS protocol seems to be supported (error around line $((LINENO - 6)))"
 | 
					                         prln_warning "Strange, no SSL/TLS protocol seems to be supported (error around line $((LINENO - 6)))"
 | 
				
			||||||
                    fi
 | 
					                    fi
 | 
				
			||||||
                    tmpfile_handle ${FUNCNAME[0]}.txt
 | 
					                    tmpfile_handle ${FUNCNAME[0]}.txt
 | 
				
			||||||
                    return 7  # this is ugly, I know
 | 
					                    return 7  # this is ugly, I know
 | 
				
			||||||
@@ -7455,7 +7455,7 @@ get_server_certificate() {
 | 
				
			|||||||
               $OPENSSL s_client $(s_client_options "$STARTTLS $BUGS -cipher $ciphers_to_test -showcerts -connect $NODEIP:$PORT $PROXY $SNI -$proto -tlsextdebug") </dev/null 2>>$ERRFILE >$TMPFILE
 | 
					               $OPENSSL s_client $(s_client_options "$STARTTLS $BUGS -cipher $ciphers_to_test -showcerts -connect $NODEIP:$PORT $PROXY $SNI -$proto -tlsextdebug") </dev/null 2>>$ERRFILE >$TMPFILE
 | 
				
			||||||
               if ! sclient_connect_successful $? $TMPFILE; then
 | 
					               if ! sclient_connect_successful $? $TMPFILE; then
 | 
				
			||||||
                    if [ -z "$1" ]; then
 | 
					                    if [ -z "$1" ]; then
 | 
				
			||||||
                        prln_warning "Strange, no SSL/TLS protocol seems to be supported (error around line $((LINENO - 6)))"
 | 
					                         prln_warning "Strange, no SSL/TLS protocol seems to be supported (error around line $((LINENO - 6)))"
 | 
				
			||||||
                    fi
 | 
					                    fi
 | 
				
			||||||
                    tmpfile_handle ${FUNCNAME[0]}.txt
 | 
					                    tmpfile_handle ${FUNCNAME[0]}.txt
 | 
				
			||||||
                    return 7  # this is ugly, I know
 | 
					                    return 7  # this is ugly, I know
 | 
				
			||||||
@@ -7832,7 +7832,7 @@ etsi_etls_visibility_info() {
 | 
				
			|||||||
                                   j+=1
 | 
					                                   j+=1
 | 
				
			||||||
                                   j+=2*0x${dercert:j:1}+1
 | 
					                                   j+=2*0x${dercert:j:1}+1
 | 
				
			||||||
                              else
 | 
					                              else
 | 
				
			||||||
                                  j+=2
 | 
					                                   j+=2
 | 
				
			||||||
                              fi
 | 
					                              fi
 | 
				
			||||||
                              # The value for this otherName is encoded as a SEQUENCE (30):
 | 
					                              # The value for this otherName is encoded as a SEQUENCE (30):
 | 
				
			||||||
                              #    VisibilityInformation ::= SEQUENCE {
 | 
					                              #    VisibilityInformation ::= SEQUENCE {
 | 
				
			||||||
@@ -8659,8 +8659,8 @@ certificate_info() {
 | 
				
			|||||||
          # we adjust the thresholds by %50 for LE certificates, relaxing those warnings
 | 
					          # we adjust the thresholds by %50 for LE certificates, relaxing those warnings
 | 
				
			||||||
          # . instead of \' because it does not break syntax highlighting in vim
 | 
					          # . instead of \' because it does not break syntax highlighting in vim
 | 
				
			||||||
          if [[ "$issuer_CN" =~ ^Let.s\ Encrypt\ Authority ]] ; then
 | 
					          if [[ "$issuer_CN" =~ ^Let.s\ Encrypt\ Authority ]] ; then
 | 
				
			||||||
                 days2warn2=$((days2warn2 / 2))
 | 
					               days2warn2=$((days2warn2 / 2))
 | 
				
			||||||
                 days2warn1=$((days2warn1 / 2))
 | 
					               days2warn1=$((days2warn1 / 2))
 | 
				
			||||||
          fi
 | 
					          fi
 | 
				
			||||||
          diffseconds=$(( $(parse_date "$enddate" "+%s" $'%F %H:%M') - $(parse_date "$startdate" "+%s" $'%F %H:%M') ))
 | 
					          diffseconds=$(( $(parse_date "$enddate" "+%s" $'%F %H:%M') - $(parse_date "$startdate" "+%s" $'%F %H:%M') ))
 | 
				
			||||||
     fi
 | 
					     fi
 | 
				
			||||||
@@ -10265,7 +10265,7 @@ fd_socket() {
 | 
				
			|||||||
                    ;;
 | 
					                    ;;
 | 
				
			||||||
               xmpp|xmpps) # XMPP, see https://tools.ietf.org/html/rfc6120
 | 
					               xmpp|xmpps) # XMPP, see https://tools.ietf.org/html/rfc6120
 | 
				
			||||||
                    starttls_xmpp_dialog
 | 
					                    starttls_xmpp_dialog
 | 
				
			||||||
                   # IM observatory: https://xmpp.net , XMPP server directory: https://xmpp.net/directory.php
 | 
					                    # IM observatory: https://xmpp.net , XMPP server directory: https://xmpp.net/directory.php
 | 
				
			||||||
                    ;;
 | 
					                    ;;
 | 
				
			||||||
               postgres) # Postgres SQL, see http://www.postgresql.org/docs/devel/static/protocol-message-formats.html
 | 
					               postgres) # Postgres SQL, see http://www.postgresql.org/docs/devel/static/protocol-message-formats.html
 | 
				
			||||||
                    starttls_postgres_dialog
 | 
					                    starttls_postgres_dialog
 | 
				
			||||||
@@ -10404,23 +10404,23 @@ get_pub_key_size() {
 | 
				
			|||||||
               case $len1 in
 | 
					               case $len1 in
 | 
				
			||||||
                    129) len="0x${pubkey:i:2}" ;;
 | 
					                    129) len="0x${pubkey:i:2}" ;;
 | 
				
			||||||
                    130) len="0x${pubkey:i:2}"
 | 
					                    130) len="0x${pubkey:i:2}"
 | 
				
			||||||
                        i=$i+2
 | 
					                         i=$i+2
 | 
				
			||||||
                        len=256*$len+"0x${pubkey:i:2}"
 | 
					                         len=256*$len+"0x${pubkey:i:2}"
 | 
				
			||||||
                        ;;
 | 
					                         ;;
 | 
				
			||||||
                    131) len="0x${pubkey:i:2}"
 | 
					                    131) len="0x${pubkey:i:2}"
 | 
				
			||||||
                        i=$i+2
 | 
					                         i=$i+2
 | 
				
			||||||
                        len=256*$len+"0x${pubkey:i:2}"
 | 
					                         len=256*$len+"0x${pubkey:i:2}"
 | 
				
			||||||
                        i=$i+2
 | 
					                         i=$i+2
 | 
				
			||||||
                        len=256*$len+"0x${pubkey:i:2}"
 | 
					                         len=256*$len+"0x${pubkey:i:2}"
 | 
				
			||||||
                        ;;
 | 
					                         ;;
 | 
				
			||||||
                    132) len="0x${pubkey:i:2}"
 | 
					                    132) len="0x${pubkey:i:2}"
 | 
				
			||||||
                        i=$i+2
 | 
					                         i=$i+2
 | 
				
			||||||
                        len=256*$len+"0x${pubkey:i:2}"
 | 
					                         len=256*$len+"0x${pubkey:i:2}"
 | 
				
			||||||
                        i=$i+2
 | 
					                         i=$i+2
 | 
				
			||||||
                        len=256*$len+"0x${pubkey:i:2}"
 | 
					                         len=256*$len+"0x${pubkey:i:2}"
 | 
				
			||||||
                        i=$i+2
 | 
					                         i=$i+2
 | 
				
			||||||
                        len=256*$len+"0x${pubkey:i:2}"
 | 
					                         len=256*$len+"0x${pubkey:i:2}"
 | 
				
			||||||
                        ;;
 | 
					                         ;;
 | 
				
			||||||
               esac
 | 
					               esac
 | 
				
			||||||
               i=$i+2+2*$len
 | 
					               i=$i+2+2*$len
 | 
				
			||||||
          fi
 | 
					          fi
 | 
				
			||||||
@@ -10445,23 +10445,23 @@ get_pub_key_size() {
 | 
				
			|||||||
               case $len1 in
 | 
					               case $len1 in
 | 
				
			||||||
                    129) len="0x${pubkey:i:2}" ;;
 | 
					                    129) len="0x${pubkey:i:2}" ;;
 | 
				
			||||||
                    130) len="0x${pubkey:i:2}"
 | 
					                    130) len="0x${pubkey:i:2}"
 | 
				
			||||||
                        i=$i+2
 | 
					                         i=$i+2
 | 
				
			||||||
                        len=256*$len+"0x${pubkey:i:2}"
 | 
					                         len=256*$len+"0x${pubkey:i:2}"
 | 
				
			||||||
                        ;;
 | 
					                         ;;
 | 
				
			||||||
                    131) len="0x${pubkey:i:2}"
 | 
					                    131) len="0x${pubkey:i:2}"
 | 
				
			||||||
                        i=$i+2
 | 
					                         i=$i+2
 | 
				
			||||||
                        len=256*$len+"0x${pubkey:i:2}"
 | 
					                         len=256*$len+"0x${pubkey:i:2}"
 | 
				
			||||||
                        i=$i+2
 | 
					                         i=$i+2
 | 
				
			||||||
                        len=256*$len+"0x${pubkey:i:2}"
 | 
					                         len=256*$len+"0x${pubkey:i:2}"
 | 
				
			||||||
                        ;;
 | 
					                         ;;
 | 
				
			||||||
                    132) len="0x${pubkey:i:2}"
 | 
					                    132) len="0x${pubkey:i:2}"
 | 
				
			||||||
                        i=$i+2
 | 
					                         i=$i+2
 | 
				
			||||||
                        len=256*"0x${pubkey:i:2}"
 | 
					                         len=256*"0x${pubkey:i:2}"
 | 
				
			||||||
                        i=$i+2
 | 
					                         i=$i+2
 | 
				
			||||||
                        len=256*"0x${pubkey:i:2}"
 | 
					                         len=256*"0x${pubkey:i:2}"
 | 
				
			||||||
                        i=$i+2
 | 
					                         i=$i+2
 | 
				
			||||||
                        len=256*"0x${pubkey:i:2}"
 | 
					                         len=256*"0x${pubkey:i:2}"
 | 
				
			||||||
                        ;;
 | 
					                         ;;
 | 
				
			||||||
               esac
 | 
					               esac
 | 
				
			||||||
          fi
 | 
					          fi
 | 
				
			||||||
          len=8*$len # convert from bytes to bits
 | 
					          len=8*$len # convert from bytes to bits
 | 
				
			||||||
@@ -12212,7 +12212,7 @@ parse_tls_serverhello() {
 | 
				
			|||||||
                         # create a new $tls_certificate_ascii that only contains a list of certificates.
 | 
					                         # create a new $tls_certificate_ascii that only contains a list of certificates.
 | 
				
			||||||
                         if [[ -n "$tls_certificate_ascii" ]]; then
 | 
					                         if [[ -n "$tls_certificate_ascii" ]]; then
 | 
				
			||||||
                              if [[ "${tls_certificate_ascii:0:2}" != "00" ]]; then
 | 
					                              if [[ "${tls_certificate_ascii:0:2}" != "00" ]]; then
 | 
				
			||||||
                                  debugme tmln_warning "Malformed Certificate Handshake message in ServerHello."
 | 
					                                   debugme tmln_warning "Malformed Certificate Handshake message in ServerHello."
 | 
				
			||||||
                                   tmpfile_handle ${FUNCNAME[0]}.txt
 | 
					                                   tmpfile_handle ${FUNCNAME[0]}.txt
 | 
				
			||||||
                                   return 1
 | 
					                                   return 1
 | 
				
			||||||
                              fi
 | 
					                              fi
 | 
				
			||||||
@@ -13340,7 +13340,7 @@ resend_if_hello_retry_request() {
 | 
				
			|||||||
               cipher_suite="${tls_hello_ascii:22:2},${tls_hello_ascii:24:2}"
 | 
					               cipher_suite="${tls_hello_ascii:22:2},${tls_hello_ascii:24:2}"
 | 
				
			||||||
               extns_offset=26
 | 
					               extns_offset=26
 | 
				
			||||||
          else
 | 
					          else
 | 
				
			||||||
              extns_offset=22
 | 
					               extns_offset=22
 | 
				
			||||||
          fi
 | 
					          fi
 | 
				
			||||||
     else
 | 
					     else
 | 
				
			||||||
          sid_len=2*$(hex2dec "${tls_hello_ascii:86:2}")
 | 
					          sid_len=2*$(hex2dec "${tls_hello_ascii:86:2}")
 | 
				
			||||||
@@ -13439,9 +13439,9 @@ resend_if_hello_retry_request() {
 | 
				
			|||||||
     fi
 | 
					     fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     if [[ "$server_version" == 0304 ]] || [[ 0x$server_version -ge 0x7f16 ]]; then
 | 
					     if [[ "$server_version" == 0304 ]] || [[ 0x$server_version -ge 0x7f16 ]]; then
 | 
				
			||||||
         # Send a dummy change cipher spec for middlebox compatibility.
 | 
					          # Send a dummy change cipher spec for middlebox compatibility.
 | 
				
			||||||
         debugme echo -en "\nsending dummy change cipher spec... "
 | 
					          debugme echo -en "\nsending dummy change cipher spec... "
 | 
				
			||||||
         socksend ", x14, x03, x03 ,x00, x01, x01" 0
 | 
					          socksend ", x14, x03, x03 ,x00, x01, x01" 0
 | 
				
			||||||
     fi
 | 
					     fi
 | 
				
			||||||
     debugme echo -en "\nsending second client hello... "
 | 
					     debugme echo -en "\nsending second client hello... "
 | 
				
			||||||
     second_clienthello="$(modify_clienthello "$original_clienthello" "$new_key_share" "$cookie")"
 | 
					     second_clienthello="$(modify_clienthello "$original_clienthello" "$new_key_share" "$cookie")"
 | 
				
			||||||
@@ -14731,8 +14731,8 @@ run_tls_fallback_scsv() {
 | 
				
			|||||||
     for p in tls1_2 tls1_1 tls1 ssl3; do
 | 
					     for p in tls1_2 tls1_1 tls1 ssl3; do
 | 
				
			||||||
          [[ $(has_server_protocol "$p") -eq 1 ]] && continue
 | 
					          [[ $(has_server_protocol "$p") -eq 1 ]] && continue
 | 
				
			||||||
          if [[ $(has_server_protocol "$p") -eq 0 ]]; then
 | 
					          if [[ $(has_server_protocol "$p") -eq 0 ]]; then
 | 
				
			||||||
                high_proto="$p"
 | 
					               high_proto="$p"
 | 
				
			||||||
                break
 | 
					               break
 | 
				
			||||||
          fi
 | 
					          fi
 | 
				
			||||||
          $OPENSSL s_client $(s_client_options "-$p $STARTTLS $BUGS -connect $NODEIP:$PORT $PROXY $SNI") >$TMPFILE 2>$ERRFILE </dev/null
 | 
					          $OPENSSL s_client $(s_client_options "-$p $STARTTLS $BUGS -connect $NODEIP:$PORT $PROXY $SNI") >$TMPFILE 2>$ERRFILE </dev/null
 | 
				
			||||||
          if sclient_connect_successful $? $TMPFILE; then
 | 
					          if sclient_connect_successful $? $TMPFILE; then
 | 
				
			||||||
@@ -15893,19 +15893,19 @@ run_rc4() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
run_youknowwho() {
 | 
					run_youknowwho() {
 | 
				
			||||||
    local cve="CVE-2013-2566"
 | 
					     local cve="CVE-2013-2566"
 | 
				
			||||||
    local cwe="CWE-310"
 | 
					     local cwe="CWE-310"
 | 
				
			||||||
    # NOT FIXME as there's no code: http://www.isg.rhul.ac.uk/tls/
 | 
					     # NOT FIXME as there's no code: http://www.isg.rhul.ac.uk/tls/
 | 
				
			||||||
    # http://blog.cryptographyengineering.com/2013/03/attack-of-week-rc4-is-kind-of-broken-in.html
 | 
					     # http://blog.cryptographyengineering.com/2013/03/attack-of-week-rc4-is-kind-of-broken-in.html
 | 
				
			||||||
    return 0
 | 
					     return 0
 | 
				
			||||||
    # in a nutshell: don't use RC4, really not!
 | 
					     # in a nutshell: don't use RC4, really not!
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # https://www.usenix.org/conference/woot13/workshop-program/presentation/smyth
 | 
					     # https://www.usenix.org/conference/woot13/workshop-program/presentation/smyth
 | 
				
			||||||
    # https://secure-resumption.com/tlsauth.pdf
 | 
					     # https://secure-resumption.com/tlsauth.pdf
 | 
				
			||||||
run_tls_truncation() {
 | 
					run_tls_truncation() {
 | 
				
			||||||
    #FIXME: difficult to test, is there any test available: pls let me know
 | 
					     #FIXME: difficult to test, is there any test available: pls let me know
 | 
				
			||||||
        :
 | 
					     :
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Test for various server implementation errors that aren't tested for elsewhere.
 | 
					# Test for various server implementation errors that aren't tested for elsewhere.
 | 
				
			||||||
@@ -15995,17 +15995,17 @@ run_grease() {
 | 
				
			|||||||
          fileout "$jsonID" "MEDIUM" "Server responded with a ServerHello rather than an alert even though it doesn't support any of the client-offered cipher suites."
 | 
					          fileout "$jsonID" "MEDIUM" "Server responded with a ServerHello rather than an alert even though it doesn't support any of the client-offered cipher suites."
 | 
				
			||||||
          bug_found=true
 | 
					          bug_found=true
 | 
				
			||||||
     else
 | 
					     else
 | 
				
			||||||
           # Send a list of non-existent ciphers such that for each cipher that
 | 
					          # Send a list of non-existent ciphers such that for each cipher that
 | 
				
			||||||
           # is defined, there is one in the list that matches in the second byte
 | 
					          # is defined, there is one in the list that matches in the second byte
 | 
				
			||||||
           # (but make sure list contains at more 127 ciphers).
 | 
					          # (but make sure list contains at more 127 ciphers).
 | 
				
			||||||
           debugme echo -e "\nSending ClientHello with non-existent ciphers, but that match existing ciphers in second byte."
 | 
					          debugme echo -e "\nSending ClientHello with non-existent ciphers, but that match existing ciphers in second byte."
 | 
				
			||||||
           tls_sockets "$proto" "de,01, de,02, de,03, de,04, de,05, de,06, de,07, de,08, de,09, de,0a, de,0b, de,0c, de,0d, de,0e, de,0f, de,10, de,11, de,12, de,13, de,14, de,15, de,16, de,17, de,18, de,19, de,1a, de,1b, de,23, de,24, de,25, de,26, de,27, de,28, de,29, de,2a, de,2b, de,2c, de,2d, de,2e, de,2f, de,30, de,31, de,32, de,33, de,34, de,35, de,36, de,37, de,38, de,39, de,3a, de,3b, de,3c, de,3d, de,3e, de,3f, de,40, de,41, de,42, de,43, de,44, de,45, de,46, de,60, de,61, de,62, de,63, de,64, de,65, de,66, de,67, de,68, de,69, de,6a, de,6b, de,6c, de,6d, de,72, de,73, de,74, de,75, de,76, de,77, de,78, de,79, de,84, de,85, de,86, de,87, de,88, de,89, de,96, de,97, de,98, de,99, de,9a, de,9b, de,9c, de,9d, de,9e, de,9f, de,a0, de,a1, de,a2, de,a3, de,a4, de,a5, de,a6, de,a7, de,ba, de,bb, de,bc, de,bd, de,be, de,bf, de,c0, de,c1, de,c2, de,c3, de,c4, de,c5, 00,ff"
 | 
					          tls_sockets "$proto" "de,01, de,02, de,03, de,04, de,05, de,06, de,07, de,08, de,09, de,0a, de,0b, de,0c, de,0d, de,0e, de,0f, de,10, de,11, de,12, de,13, de,14, de,15, de,16, de,17, de,18, de,19, de,1a, de,1b, de,23, de,24, de,25, de,26, de,27, de,28, de,29, de,2a, de,2b, de,2c, de,2d, de,2e, de,2f, de,30, de,31, de,32, de,33, de,34, de,35, de,36, de,37, de,38, de,39, de,3a, de,3b, de,3c, de,3d, de,3e, de,3f, de,40, de,41, de,42, de,43, de,44, de,45, de,46, de,60, de,61, de,62, de,63, de,64, de,65, de,66, de,67, de,68, de,69, de,6a, de,6b, de,6c, de,6d, de,72, de,73, de,74, de,75, de,76, de,77, de,78, de,79, de,84, de,85, de,86, de,87, de,88, de,89, de,96, de,97, de,98, de,99, de,9a, de,9b, de,9c, de,9d, de,9e, de,9f, de,a0, de,a1, de,a2, de,a3, de,a4, de,a5, de,a6, de,a7, de,ba, de,bb, de,bc, de,bd, de,be, de,bf, de,c0, de,c1, de,c2, de,c3, de,c4, de,c5, 00,ff"
 | 
				
			||||||
           success=$?
 | 
					          success=$?
 | 
				
			||||||
           if [[ $success -eq 0 ]] || [[ $success -eq 2 ]]; then
 | 
					          if [[ $success -eq 0 ]] || [[ $success -eq 2 ]]; then
 | 
				
			||||||
                prln_svrty_medium " Server claims to support non-existent cipher suite."
 | 
					               prln_svrty_medium " Server claims to support non-existent cipher suite."
 | 
				
			||||||
                fileout "$jsonID" "MEDIUM" "Server claims to support non-existent cipher suite."
 | 
					               fileout "$jsonID" "MEDIUM" "Server claims to support non-existent cipher suite."
 | 
				
			||||||
                bug_found=true
 | 
					               bug_found=true
 | 
				
			||||||
           elif grep -q " The ServerHello specifies a cipher suite that wasn't included in the ClientHello" "$TEMPDIR/$NODEIP.parse_tls_serverhello.txt" ; then
 | 
					          elif grep -q " The ServerHello specifies a cipher suite that wasn't included in the ClientHello" "$TEMPDIR/$NODEIP.parse_tls_serverhello.txt" ; then
 | 
				
			||||||
               prln_svrty_medium " Server only compares against second byte in each cipher suite in ClientHello."
 | 
					               prln_svrty_medium " Server only compares against second byte in each cipher suite in ClientHello."
 | 
				
			||||||
               fileout "$jsonID" "MEDIUM" "Server only compares against second byte in each cipher suite in ClientHello."
 | 
					               fileout "$jsonID" "MEDIUM" "Server only compares against second byte in each cipher suite in ClientHello."
 | 
				
			||||||
               bug_found=true
 | 
					               bug_found=true
 | 
				
			||||||
@@ -16421,7 +16421,7 @@ run_robot() {
 | 
				
			|||||||
               len=${#encrypted_pms}
 | 
					               len=${#encrypted_pms}
 | 
				
			||||||
               client_key_exchange=""
 | 
					               client_key_exchange=""
 | 
				
			||||||
               for (( i=0; i<len; i=i+2 )); do
 | 
					               for (( i=0; i<len; i=i+2 )); do
 | 
				
			||||||
                   client_key_exchange+=", x${encrypted_pms:i:2}"
 | 
					                    client_key_exchange+=", x${encrypted_pms:i:2}"
 | 
				
			||||||
               done
 | 
					               done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
               # The contents of change cipher spec are fixed.
 | 
					               # The contents of change cipher spec are fixed.
 | 
				
			||||||
@@ -16570,10 +16570,10 @@ get_install_dir() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
     # still no cipher mapping file (and realpath is not present):
 | 
					     # still no cipher mapping file (and realpath is not present):
 | 
				
			||||||
     if [[ ! -r "$CIPHERS_BY_STRENGTH_FILE" ]] && type -p readlink &>/dev/null ; then
 | 
					     if [[ ! -r "$CIPHERS_BY_STRENGTH_FILE" ]] && type -p readlink &>/dev/null ; then
 | 
				
			||||||
         readlink -f ls &>/dev/null && \
 | 
					          readlink -f ls &>/dev/null && \
 | 
				
			||||||
              TESTSSL_INSTALL_DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")" || \
 | 
					               TESTSSL_INSTALL_DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")" || \
 | 
				
			||||||
              TESTSSL_INSTALL_DIR="$(dirname "$(readlink "${BASH_SOURCE[0]}")")"
 | 
					               TESTSSL_INSTALL_DIR="$(dirname "$(readlink "${BASH_SOURCE[0]}")")"
 | 
				
			||||||
              # not sure whether Darwin has -f
 | 
					               # not sure whether Darwin has -f
 | 
				
			||||||
          CIPHERS_BY_STRENGTH_FILE="$TESTSSL_INSTALL_DIR/etc/cipher-mapping.txt"
 | 
					          CIPHERS_BY_STRENGTH_FILE="$TESTSSL_INSTALL_DIR/etc/cipher-mapping.txt"
 | 
				
			||||||
          [[ -r "$TESTSSL_INSTALL_DIR/cipher-mapping.txt" ]] && CIPHERS_BY_STRENGTH_FILE="$TESTSSL_INSTALL_DIR/cipher-mapping.txt"
 | 
					          [[ -r "$TESTSSL_INSTALL_DIR/cipher-mapping.txt" ]] && CIPHERS_BY_STRENGTH_FILE="$TESTSSL_INSTALL_DIR/cipher-mapping.txt"
 | 
				
			||||||
     fi
 | 
					     fi
 | 
				
			||||||
@@ -16689,7 +16689,7 @@ find_openssl_binary() {
 | 
				
			|||||||
     elif [[ "$openssl_location" =~ $cwd ]] && [[ "$cwd" != '.' ]]; then
 | 
					     elif [[ "$openssl_location" =~ $cwd ]] && [[ "$cwd" != '.' ]]; then
 | 
				
			||||||
          OPENSSL_LOCATION="${openssl_location%%$cwd}"
 | 
					          OPENSSL_LOCATION="${openssl_location%%$cwd}"
 | 
				
			||||||
     else
 | 
					     else
 | 
				
			||||||
         OPENSSL_LOCATION="$openssl_location"
 | 
					          OPENSSL_LOCATION="$openssl_location"
 | 
				
			||||||
     fi
 | 
					     fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     OSSL_CIPHERS_S=""
 | 
					     OSSL_CIPHERS_S=""
 | 
				
			||||||
@@ -17348,8 +17348,8 @@ initialize_engine(){
 | 
				
			|||||||
          # to suppress the warning (confuses users), see #1119
 | 
					          # to suppress the warning (confuses users), see #1119
 | 
				
			||||||
          # https://github.com/openssl/openssl/commit/b524b808a1d1ba204dbdcbb42de4e3bddb3472ac
 | 
					          # https://github.com/openssl/openssl/commit/b524b808a1d1ba204dbdcbb42de4e3bddb3472ac
 | 
				
			||||||
          if ! grep -q 'using the .include directive' /etc/ssl/openssl.cnf; then
 | 
					          if ! grep -q 'using the .include directive' /etc/ssl/openssl.cnf; then
 | 
				
			||||||
                 outln
 | 
					               outln
 | 
				
			||||||
                 pr_warning "No engine or GOST support via engine with your $OPENSSL"; outln
 | 
					               pr_warning "No engine or GOST support via engine with your $OPENSSL"; outln
 | 
				
			||||||
          fi
 | 
					          fi
 | 
				
			||||||
          fileout_insert_warning "engine_problem" "WARN" "No engine or GOST support via engine with your $OPENSSL"
 | 
					          fileout_insert_warning "engine_problem" "WARN" "No engine or GOST support via engine with your $OPENSSL"
 | 
				
			||||||
          # Avoid clashes of OpenSSL 1.1.1 config file with our openssl 1.0.2. This is for Debian 10
 | 
					          # Avoid clashes of OpenSSL 1.1.1 config file with our openssl 1.0.2. This is for Debian 10
 | 
				
			||||||
@@ -19124,7 +19124,7 @@ parse_cmd_line() {
 | 
				
			|||||||
                    prepare_debug
 | 
					                    prepare_debug
 | 
				
			||||||
                    mybanner
 | 
					                    mybanner
 | 
				
			||||||
                    exit $ALLOK
 | 
					                    exit $ALLOK
 | 
				
			||||||
                   ;;
 | 
					                    ;;
 | 
				
			||||||
               --mx)
 | 
					               --mx)
 | 
				
			||||||
                    do_mx_all_ips=true
 | 
					                    do_mx_all_ips=true
 | 
				
			||||||
                    PORT=25
 | 
					                    PORT=25
 | 
				
			||||||
@@ -19773,7 +19773,7 @@ lets_roll() {
 | 
				
			|||||||
               fileout_section_header $section_number true && ((section_number++))
 | 
					               fileout_section_header $section_number true && ((section_number++))
 | 
				
			||||||
               "$do_client_simulation" && { run_client_simulation; ret=$(($? + ret)); stopwatch run_client_simulation; }
 | 
					               "$do_client_simulation" && { run_client_simulation; ret=$(($? + ret)); stopwatch run_client_simulation; }
 | 
				
			||||||
          fi
 | 
					          fi
 | 
				
			||||||
         fileout_section_footer true
 | 
					          fileout_section_footer true
 | 
				
			||||||
     fi
 | 
					     fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     outln
 | 
					     outln
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user