NGINX中不同SSL端口的SSL ssl_verify_clent不同

时间:2016-06-27 19:18:58

标签: ssl nginx

我在Nginx中有一个定义,在不同的端口,我需要不同的SSL客户端验证选项。

当我连接到:443 / location1时,Nginx将请求客户端证书,但会因“HTTP 400,错误请求,需要客户端证书”而失败。似乎NGinx使用端口444的服务器规则在连接上有“ssl_verify_client off”,但在路由上,NGinx检查是否给出了客户端证书,因为它是端口443的规则,表示客户端验证是必需的,然后在实际的HTTP请求中失败。

我挖了一下,似乎找不到任何关于此的文档。显然相同的IP:PORT是一个问题,但到目前为止所有的一切都通过PORT指示我可以更改配置,但似乎并非如此。

def data_to_features_par(my_file, features_file):
    def feature_processor(row):
        time.sleep(20)

    def feed(queue, my_file, number_of_consumers):
        with open(snapshot_file) as sp:
            reader = csv.reader(sp)
            for row in reader:
                queue.put(row, block=True)
            for x in range(number_of_consumers):
                queue.put(None)

    def calc(queueIn, queueOut):
        while True:
            try:
                par = queueIn.get(block=True)
                counter += 1
                if par is None:
                    queueOut.put(None)
                    break
                res = feature_processor(par) # time-consuming computations
                queueOut.put(res)
            except Empty:
                pass

    def write(queue, output_file):
        with open(output_file, "w") as fp:
            writer = csv.writer(fp)
            while True:
                try:
                    res = queue.get(block=True)
                    if res is None:
                        break
                    writer.writerow(res)
                except Empty:
                    pass

    cpu_count = multiprocessing.cpu_count()
    workerQueue = Queue()
    writerQueue = Queue()
    calc_proc_count = cpu_count-2
    feedProc = Process(target=feed, args=(workerQueue, my_file, calc_proc_count))
    calcProc = [Process(target=calc, args=(workerQueue, writerQueue)) for _ in xrange(calc_proc_count)]
    writProc = Process(target=write, args=(writerQueue, features_file))

    feedProc.start()
    for p in calcProc:
        p.daemon = True
        p.start()
    writProc.start()

    try:
        feedProc.join()
        for p in calcProc:
            p.join()
        writProc.join()

    except KeyboardInterrupt:
        feedProc.terminate()
        for p in calcProc:
            p.terminate()
        writProc.terminate()

1 个答案:

答案 0 :(得分:0)

我最终想通了。

客户端拒绝是强制性的,但可以在建立连接后或握手期间发生。

  • NGINX将允许握手完成,然后强制执行 客户已经过验证。
  • APACHE(至少我使用的最后一个版本)失败 握手。