টিএলএস কনফিগারেশন সক্ষম করে ট্র্যাফিক টিসিপি পরিষেবাদিতে কীভাবে সংযুক্ত করবেন?


13

আমি ট্রাফিককে কনফিগার করার চেষ্টা করছি যাতে আমার ডোমেন নামের মাধ্যমে পরিষেবাগুলিতে অ্যাক্সেস থাকতে পারে এবং আমাকে আলাদা আলাদা বন্দর নির্ধারণ করতে না হয়। উদাহরণস্বরূপ, দুটি মঙ্গোডিবি পরিষেবা, উভয়ই ডিফল্ট পোর্টে, তবে বিভিন্ন ডোমেনে example.localhostএবং example2.localhost। শুধুমাত্র এই উদাহরণ কাজ করে। মানে, অন্যান্য কেসগুলি সম্ভবত কাজ করে তবে আমি তাদের সাথে সংযোগ করতে পারি না এবং সমস্যাটি কী তা আমি বুঝতে পারি না। ট্রাফিকের সাথে এটি সম্ভবত কোনও সমস্যা নয়।

আমি কাজ করে এমন একটি উদাহরণ সহ একটি ভান্ডার তৈরি করেছি । আপনাকে কেবল এমকেসার্ট দিয়ে নিজের শংসাপত্র তৈরি করতে হবে । পৃষ্ঠায় ত্রুটিটি example.localhostফিরে আসে 403 Forbiddenতবে আপনার এটি নিয়ে চিন্তা করা উচিত নয়, কারণ এই কনফিগারেশনের উদ্দেশ্য হ'ল এসএসএল কাজ করছে তা দেখানো (প্যাডলক, সবুজ অবস্থা)। সুতরাং ফোকাস করবেন না 403

mongoপরিষেবার সাথে কেবল SSL সংযোগ কাজ করে। আমি এটি রোবো 3 টি প্রোগ্রাম দিয়ে পরীক্ষা করেছি । এসএসএল সংযোগ নির্বাচন করার পরে, হোস্টটি প্রদান করা example.localhostএবং স্ব-স্বাক্ষরিত (বা নিজস্ব) সংযোগের জন্য শংসাপত্র নির্বাচন করা। এবং এটি একমাত্র জিনিস যা সেভাবে কাজ করে। সংযোগ redis( Redis ডেস্কটপ ম্যানেজার ) এবং pgsql( PhpStorm , DBeaver , DbVisualizer ) কিনা আমি সার্টিফিকেট না প্রদান বা নির্বিশেষে কাজ করে না। আমি পরিষেবাগুলিতে এসএসএল ফরোয়ার্ড করি না, আমি কেবল ট্রাফিকের সাথে সংযুক্ত করি। আমি এটি উপর দীর্ঘ ঘন্টা ব্যয়। আমি ইন্টারনেট অনুসন্ধান করেছি। আমি এখনও উত্তর খুঁজে পাই না। কেউ কি এর সমাধান করেছেন?

পুনশ্চ. আমি লিনাক্স মিন্টে কাজ করি, সুতরাং আমার কনফিগারেশনটি কোনও সমস্যা ছাড়াই এই পরিবেশে কাজ করা উচিত। আমি লিনাক্সের জন্য সমাধান চাইব।


আপনি যদি সংগ্রহস্থলটি ব্রাউজ করতে না চান তবে আমি সর্বাধিক গুরুত্বপূর্ণ ফাইলগুলি সংযুক্ত করি:

Docker-compose.yml

version: "3.7"

services:
    traefik:
        image: traefik:v2.0
        ports:
            - 80:80
            - 443:443
            - 8080:8080
            - 6379:6379
            - 5432:5432
            - 27017:27017
        volumes:
            - /var/run/docker.sock:/var/run/docker.sock:ro
            - ./config.toml:/etc/traefik/traefik.config.toml:ro
            - ./certs:/etc/certs:ro
        command:
            - --api.insecure
            - --accesslog
            - --log.level=INFO
            - --entrypoints.http.address=:80
            - --entrypoints.https.address=:443
            - --entrypoints.traefik.address=:8080
            - --entrypoints.mongo.address=:27017
            - --entrypoints.postgres.address=:5432
            - --entrypoints.redis.address=:6379
            - --providers.file.filename=/etc/traefik/traefik.config.toml
            - --providers.docker
            - --providers.docker.exposedByDefault=false
            - --providers.docker.useBindPortIP=false

    apache:
        image: php:7.2-apache
        labels:
            - traefik.enable=true
            - traefik.http.routers.http-dev.entrypoints=http
            - traefik.http.routers.http-dev.rule=Host(`example.localhost`)
            - traefik.http.routers.https-dev.entrypoints=https
            - traefik.http.routers.https-dev.rule=Host(`example.localhost`)
            - traefik.http.routers.https-dev.tls=true
            - traefik.http.services.dev.loadbalancer.server.port=80
    pgsql:
        image: postgres:10
        environment:
            POSTGRES_DB: postgres
            POSTGRES_USER: postgres
            POSTGRES_PASSWORD: password
        labels:
            - traefik.enable=true
            - traefik.tcp.routers.pgsql.rule=HostSNI(`example.localhost`)
            - traefik.tcp.routers.pgsql.tls=true
            - traefik.tcp.routers.pgsql.service=pgsql
            - traefik.tcp.routers.pgsql.entrypoints=postgres
            - traefik.tcp.services.pgsql.loadbalancer.server.port=5432
    mongo:
        image: mongo:3
        labels:
            - traefik.enable=true
            - traefik.tcp.routers.mongo.rule=HostSNI(`example.localhost`)
            - traefik.tcp.routers.mongo.tls=true
            - traefik.tcp.routers.mongo.service=mongo
            - traefik.tcp.routers.mongo.entrypoints=mongo
            - traefik.tcp.services.mongo.loadbalancer.server.port=27017
    redis:
        image: redis:3
        labels:
            - traefik.enable=true
            - traefik.tcp.routers.redis.rule=HostSNI(`example.localhost`)
            - traefik.tcp.routers.redis.tls=true
            - traefik.tcp.routers.redis.service=redis
            - traefik.tcp.routers.redis.entrypoints=redis
            - traefik.tcp.services.redis.loadbalancer.server.port=6379

config.toml

[tls]
[[tls.certificates]]
certFile = "/etc/certs/example.localhost.pem"
keyFile = "/etc/certs/example.localhost-key.pem"

বিল্ড ও রান করুন

mkcert example.localhost # in ./certs/
docker-compose up -d

ধাপে ধাপে প্রস্তুত

  1. এমকিসার্ট ইনস্টল করুন ( mkcert -installসিএ- তেও চালান )
  2. আমার কোডটি ক্লোন করুন
  3. ইন certsফোল্ডারের রানmkcert example.localhost
  4. দ্বারা ধারক শুরু করুন docker-compose up -d
  5. পৃষ্ঠা খুলুন https: //example.localhost/ এবং এটি নিরাপদ সংযোগ কিনা তা পরীক্ষা করুন
  6. যদি http: //example.localhost/ ঠিকানাটি পৌঁছানো যায় না, তবে যুক্ত 127.0.0.1 example.localhostকরুন/etc/hosts

শংশাপত্র:

  • সার্বজনীন: ./certs/example.localhost.pem
  • ব্যক্তিগত: ./certs/example.localhost-key.pem
  • সিএ: ~/.local/share/mkcert/rootCA.pem

মঙ্গোডিবি পরীক্ষা করুন

  1. রোবো 3 টি ইনস্টল করুন
  2. নতুন সংযোগ তৈরি করুন:
    • ঠিকানা: example.localhost
    • এসএসএল প্রোটোকল ব্যবহার করুন
    • সিএ শংসাপত্র: rootCA.pem(বা স্ব-স্বাক্ষরিত শংসাপত্র)
  3. পরীক্ষার সরঞ্জাম:

পরীক্ষা

টেস্ট রেডিস

  1. রেডিসডেস্কটপম্যানেজার ইনস্টল করুন
  2. নতুন সংযোগ তৈরি করুন:
    • ঠিকানা: example.localhost
    • SSL এর
    • সর্বজনীন কী: example.localhost.pem
    • ব্যক্তিগত কী: example.localhost-key.pem
    • কর্তৃপক্ষ: rootCA.pem
  3. পরীক্ষার সরঞ্জাম:

পরীক্ষা


যতদূর:

  1. আইপি (ট্রাফিক থেকে তথ্য) এর মাধ্যমে পোস্টগ্র্রেসে সংযুক্ত হতে পারে
jdbc:postgresql://172.21.0.4:5432/postgres?sslmode=disable

এখানে চিত্র বর্ণনা লিখুন

jdbc:postgresql://172.21.0.4:5432/postgres?sslfactory=org.postgresql.ssl.NonValidatingFactory

এখানে চিত্র বর্ণনা লিখুন


টেলিট চেষ্টা করুন (আইপি প্রতিটি ডকার পুনঃসূচনা পরিবর্তন করে):

> telnet 172.27.0.5 5432
Trying 172.27.0.5...
Connected to 172.27.0.5.
Escape character is '^]'.
^]
Connection closed by foreign host.
> telnet example.localhost 5432
Trying ::1...
Connected to example.localhost.
Escape character is '^]'.
^]
HTTP/1.1 400 Bad Request
Content-Type: text/plain; charset=utf-8
Connection: close

400 Bad RequestConnection closed by foreign host.

আমি যদি পোস্টগ্রিজের সাথে সরাসরি সংযোগ করি তবে ডেটাটি দুর্দান্ত। আমি যদি ট্রাফিকের মাধ্যমে সংযোগ স্থাপন করি তবে সংযোগটি বন্ধ করার সময় আমার কাছে খারাপ অনুরোধ রয়েছে। এর অর্থ কী এবং এর অবশ্যই কিছু অর্থ হওয়া উচিত কিনা আমার কোনও ধারণা নেই।


I can't connect to them-> আপনি এটি কীভাবে পরীক্ষা করেছিলেন এবং ত্রুটিটি কী ছিল?
জান গ্যারাজ

@ জনগরাজ আমি একটি ধাপে ধাপে নির্দেশিকা যুক্ত করেছি
গ্যান্ডার

Connections to redis (Redis Desktop Manager) ... do not work, তবে স্ক্রিনশট দেখায় Successful connection-? আপনি কেন নিম্ন স্তরের সাথে পরীক্ষা করছেন না curl, openssl, telnet, ...? netstatযদি সেই অ্যাপ্লিকেশন পোর্টগুলি সত্যই 127.0.0.1ইন্টারফেসে ট্রাফিকের জন্য আবদ্ধ হয় তবে আপনি কেন তা পরীক্ষা করছেন না ?
জান গরাজ

ট্রাফিক এবং ডাটাবেস সহ ধারকগুলি কি একই হোস্টে চালিত হয়?
রায়ব্যাঙ্কো আলেকজান্ডার

@ র্যাবচেনকো আলেকজান্ডার হ্যাঁ, ডকারের পাত্রে
গ্যান্ডার

উত্তর:


2

কমপক্ষে PostgreSQL ইস্যুটির জন্য, মনে হচ্ছে সংযোগটি ক্লিয়ারটেক্সটে শুরু হয়েছিল এবং তারপরে টিএলএসে আপগ্রেড করা হয়েছে:

সুতরাং প্রক্সিটি প্রোটোকলের টিএলএস ফাংশনে এই ক্লিয়ারটেক্সট হ্যান্ডশেক + আপগ্রেডকে সমর্থন করে না বলে যদি প্রক্সি দিয়ে টিএলএস সমাপ্তি ব্যবহার করা মূলত অসম্ভব ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.