Openssl সঙ্গে স্ব স্বাক্ষরিত শংসাপত্র তৈরি করতে কিভাবে?




certificate ssl-certificate (9)

কী জেনারেট করুন

আমি /etc/mysqlসার্টিফিকেট জন্য ব্যবহার করছি কারণ /etc/apparmor.d/usr.sbin.mysqldরয়েছে /etc/mysql/*.pem r

sudo su -
cd /etc/mysql
openssl genrsa -out ca-key.pem 2048;
openssl req -new -x509 -nodes -days 1000 -key ca-key.pem -out ca-cert.pem;
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server-key.pem -out server-req.pem;
openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem;
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client-key.pem -out client-req.pem;
openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem;

কনফিগারেশন যোগ করুন

/etc/mysql/my.cnf

[client]
ssl-ca=/etc/mysql/ca-cert.pem
ssl-cert=/etc/mysql/client-cert.pem
ssl-key=/etc/mysql/client-key.pem

[mysqld]
ssl-ca=/etc/mysql/ca-cert.pem
ssl-cert=/etc/mysql/server-cert.pem
ssl-key=/etc/mysql/server-key.pem

আমার সেটআপে, উবুন্টু সার্ভারে লগ ইন করা হয়েছে: /var/log/mysql/error.log

নোট অনুসরণ করুন:

  • SSL error: Unable to get certificate from '...'

    যদি এটি apparmors কনফিগারেশন না হয় তবে MySQL আপনার সার্টিফিকেট ফাইল অ্যাক্সেস পড়তে অস্বীকার করা হতে পারে । পূর্ববর্তী ধাপে উল্লিখিত হিসাবে ^, আমাদের সমস্ত শর্টগুলি ডিরেক্টরিতে .pemফাইল হিসাবে সংরক্ষণ করুন /etc/mysql/যা ডিফল্টভাবে অ্যাপমার্মার দ্বারা অনুমোদিত হয় (অথবা আপনার অভিভাবক / SELinux পরিবর্তন করুন যেখানে আপনি সেগুলি সংরক্ষণ করতে পারবেন।)

  • SSL error: Unable to get private key

    আপনার MySQL সার্ভার সংস্করণ ডিফল্ট rsa:2048বিন্যাস সমর্থন করতে পারে না ।

    গোপন সঙ্গে rsa:2048প্লেইন জেনারেট rsa:

    openssl rsa -in server-key.pem -out server-key.pem
    openssl rsa -in client-key.pem -out client-key.pem
    
  • স্থানীয় সার্ভার ssl সমর্থন করে কিনা তা পরীক্ষা করুন :

    mysql -u root -p
    mysql> show variables like "%ssl%"; 
    +---------------+----------------------------+
    | Variable_name | Value                      |
    +---------------+----------------------------+
    | have_openssl  | YES                        |
    | have_ssl      | YES                        |
    | ssl_ca        | /etc/mysql/ca-cert.pem     |
    | ssl_capath    |                            |
    | ssl_cert      | /etc/mysql/server-cert.pem |
    | ssl_cipher    |                            |
    | ssl_key       | /etc/mysql/server-key.pem  |
    +---------------+----------------------------+
    
  • ডিবিতে একটি সংযোগ যাচাই করা এসএসএল এনক্রিপ্ট করা হয় :

    সংযোগ যাচাই করা হচ্ছে

    মাইএসকিউএল ইনস্ট্যান্সে লগ ইন হলে, আপনি প্রশ্নটি জারি করতে পারেন:

    show status like 'Ssl_cipher'; 
    

    আপনার সংযোগ এনক্রিপ্ট করা হয় না, ফলাফল ফাঁকা হবে:

    mysql> show status like 'Ssl_cipher'; 
    +---------------+-------+ 
    | Variable_name | Value | 
    +---------------+-------+ 
    | Ssl_cipher    |       |  
    +---------------+-------+ 
    1 row in set (0.00 sec) 
    

    অন্যথা, এটি সাইফার ব্যবহারের জন্য একটি অ-শূন্য দৈর্ঘ্য স্ট্রিং দেখাবে:

    mysql> show status like 'Ssl_cipher'; 
    +---------------+--------------------+ 
    | Variable_name | Value              | 
    +---------------+--------------------+ 
    | Ssl_cipher    | DHE-RSA-AES256-SHA |  
    +---------------+--------------------+ 
    1 row in set (0.00 sec) 
    
  • নির্দিষ্ট ব্যবহারকারীর সংযোগের জন্য এসএসএল প্রয়োজন ('এসএসএল প্রয়োজন'):

    • SSL এর

    সার্ভারটিকে শুধুমাত্র অ্যাকাউন্টের জন্য SSL-এনক্রিপ্টযুক্ত সংযোগগুলির অনুমতি দেওয়ার জন্য বলছে।

    GRANT ALL PRIVILEGES ON test.* TO 'root'@'localhost'
      REQUIRE SSL;
    

    সংযোগ করার জন্য, ক্লায়েন্ট সার্ভার শংসাপত্রটি প্রমাণীকরণ করতে --ssl-ca বিকল্প উল্লেখ করতে হবে, এবং --ssl-key এবং --ssl-cert বিকল্পগুলি অতিরিক্ত উল্লেখ করতে পারে। যদি না --ssl-ca বিকল্প না বা --ssl-capath অপশন নির্দিষ্ট করা হয়, ক্লায়েন্ট সার্ভার শংসাপত্রটি প্রমাণীকরণ করে না।

বিকল্প লিঙ্ক: এখানে দীর্ঘ টিউটোরিয়াল http://www.madirish.net/214

আমি একটি এমবেডেড লিনাক্স ডিভাইসে https সমর্থন যোগ করছি। আমি এই পদক্ষেপগুলির সাথে একটি স্বাক্ষরিত শংসাপত্র তৈরি করার চেষ্টা করেছি:

openssl req -new > cert.csr
openssl rsa -in privkey.pem -out key.pem
openssl x509 -in cert.csr -out cert.pem -req -signkey key.pem -days 1001
cat key.pem>>cert.pem

এটি কাজ করে তবে আমি কিছু ত্রুটি পেতে পারি, উদাহরণস্বরূপ, গুগল ক্রোম:

এই সম্ভবত আপনি খুঁজছেন সাইটের নয়!
সাইটের নিরাপত্তা শংসাপত্র বিশ্বস্ত নয়!

আমি কিছু অনুপস্থিত করছি? স্ব-স্বাক্ষরিত শংসাপত্র তৈরি করার এই সঠিক উপায় কি?


আমি কিছু অনুপস্থিত করছি? স্ব-স্বাক্ষরিত শংসাপত্র তৈরি করার এই সঠিক উপায় কি?

একটি স্ব স্ব স্বাক্ষরিত সার্টিফিকেট তৈরি করা সহজ। আপনি শুধু openssl req কমান্ড ব্যবহার করুন। ব্রাউজার এবং কমান্ড লাইন সরঞ্জামগুলির মতো ক্লায়েন্টদের বৃহত্তম নির্বাচন দ্বারা গ্রাস করা যেতে পারে এমন একটি তৈরি করতে এটি চতুর হতে পারে।

এটির কঠিন কারণ ব্রাউজারগুলিতে তাদের নিজস্ব প্রয়োজনীয়তা রয়েছে এবং তারা আইইটিএফের চেয়ে বেশি বিধিনিষেধযুক্ত। ব্রাউজার দ্বারা ব্যবহৃত প্রয়োজনীয়তা CA / ব্রাউজার ফোরামে নথিভুক্ত করা হয় (নীচের রেফারেন্স দেখুন)। সীমাবদ্ধতা দুটি মূল এলাকায় উদ্ভূত হয়: (1) ট্রাস্ট অ্যাঙ্কার, এবং (2) DNS নাম।

আধুনিক ব্রাউজারগুলি (২013/2015 সালে আমরা যে ওয়েয়ারেজ ব্যবহার করছি তার মতো) একটি এমন একটি শংসাপত্র চান যা একটি ট্রাস্ট এনকোয়ারে ফিরে আসে এবং তারা DNS নামগুলি সার্টিফিকেটে বিশেষ ভাবে উপস্থাপন করতে চায়। এবং ব্রাউজার সক্রিয়ভাবে স্ব স্বাক্ষরিত সার্ভার শংসাপত্রের বিরুদ্ধে চলছে

কিছু ব্রাউজার ঠিক স্ব স্ব স্বাক্ষর সার্ভার শংসাপত্রটি আমদানি করা সহজ করে না। আসলে, আপনি অ্যান্ড্রয়েড ব্রাউজারের মত কিছু ব্রাউজারের সাহায্যে পারবেন না। সুতরাং সম্পূর্ণ সমাধান আপনার নিজের কর্তৃত্ব হতে হয়।

আপনার নিজস্ব কর্তৃপক্ষ হওয়ার অনুপস্থিতিতে, সার্টিফিকেটটি সাফল্যের সর্বাধিক সুযোগ দেওয়ার জন্য আপনাকে অবশ্যই DNS নামগুলি পেতে হবে। কিন্তু আমি আপনাকে আপনার নিজের কর্তৃত্বের জন্য উত্সাহিত করা হবে। এটি আপনার নিজের কর্তৃত্বের পক্ষে সহজ এবং এটি সমস্ত বিশ্বাসের সমস্যাগুলি (যা নিজের চেয়েও বেশি বিশ্বাসযোগ্য?) পদক্ষেপ নেবে।

এই সম্ভবত আপনি খুঁজছেন সাইটের নয়!
সাইটের নিরাপত্তা শংসাপত্র বিশ্বস্ত নয়!

সার্ভার শংসাপত্র যাচাই করার জন্য ব্রাউজারগুলি আনন্দের পূর্বনির্ধারিত তালিকা ব্যবহার করে কারণ এটি এই। একটি স্ব স্বাক্ষরিত শংসাপত্র একটি বিশ্বস্ত নোঙ্গর ফিরে চেন না।

এই এড়াতে সর্বোত্তম উপায় হল:

  1. আপনার নিজস্ব কর্তৃপক্ষ তৈরি করুন (অর্থাত্, একটি CA হয়ে)
  2. সার্ভারের জন্য একটি শংসাপত্র সাইনিং অনুরোধ (CSR) তৈরি করুন
  3. আপনার CA কী দিয়ে সার্ভারের CSR সাইন ইন করুন
  4. সার্ভারে সার্ভার শংসাপত্র ইনস্টল করুন
  5. ক্লায়েন্টে CA সার্টিফিকেট ইনস্টল করুন

ধাপ 1 - আপনার নিজের কর্তৃত্ব তৈরি করুন কেবল CA: true সহ স্বাক্ষরিত শংসাপত্র তৈরি করার অর্থ CA: true এবং সঠিক কী ব্যবহার। এর মানে হল বিষয় এবং ইস্যুকারী একই সত্তা, CA মৌলিক সীমাবদ্ধতাগুলিতে সত্য হিসাবে সেট করা আছে (এটি অবশ্যই সমালোচনামূলক হিসাবে চিহ্নিত হওয়া উচিত), কী ব্যবহার keyCertSign এবং crlSign keyCertSign crlSign (যদি আপনি CRLs ব্যবহার করেন) এবং বিষয় কী সনাক্তকারী (SKI ) কর্তৃপক্ষ কী সনাক্তকারী (AKI) হিসাবে একই।

আপনার নিজের সার্টিফিকেট অথরিটি হয়ে উঠতে, আপনার সার্টিফিকেশন অথরিটির সাথে আপনি কীভাবে সনদ সাইনিং অনুরোধটি সাইন ইন করবেন? স্ট্যাক ওভারফ্লো উপর। তারপরে, ব্রাউজার দ্বারা ব্যবহৃত ট্রাস্ট স্টোরে আপনার CA আমদানি করুন।

ধাপ 2 - 4 প্রায়শই আপনি পাবলিক সার্ভারের সার্ভারের জন্য কী করেন যখন আপনি Startcom বা Startcom মত CA এর পরিষেবাগুলি তালিকাভুক্ত করেন। পদক্ষেপ 1 এবং 5 আপনাকে তৃতীয় পক্ষের কর্তৃত্ব এড়াতে এবং আপনার নিজের কর্তৃত্ব হিসাবে কাজ করতে দেয় (আপনার নিজের উপর নির্ভর করতে ভাল?)।

ব্রাউজার সতর্কতা এড়াতে পরবর্তী সেরা উপায় সার্ভারের শংসাপত্রের উপর বিশ্বাস করা। তবে কিছু ব্রাউজার, যেমন Android এর ডিফল্ট ব্রাউজার, এটি আপনাকে করতে দেয় না। তাই এটি প্ল্যাটফর্মের উপর কাজ করবে না।

ব্রাউজারের সমস্যা (এবং অন্যান্য অনুরূপ ব্যবহারকারী এজেন্ট) স্বয়ং স্বাক্ষরিত শংসাপত্রের উপর বিশ্বাস না করেই থিংসগুলির (আইওটি) একটি বড় সমস্যা হতে চলেছে। উদাহরণস্বরূপ, যখন আপনি আপনার থার্মোস্ট্যাট বা রেফ্রিজারেটরের সাথে সংযোগ করার সময় এটি কী ঘটতে চলেছে? উত্তর হল, ব্যবহারকারীর অভিজ্ঞতা যতদূর ভাল হয়, কিছুই ভাল হয় না।

W3C এর WebAppSec ওয়ার্কিং গোষ্ঠী এই সমস্যাটি সন্ধান করতে শুরু করেছে। দেখুন, উদাহরণস্বরূপ, প্রস্তাবনা: অ-সুরক্ষিত হিসাবে HTTP চিহ্নিত

Openssl সঙ্গে স্ব স্বাক্ষরিত শংসাপত্র তৈরি করতে কিভাবে?

নীচের কমান্ড এবং কনফিগারেশন ফাইল একটি স্ব স্ব স্বাক্ষরিত শংসাপত্র তৈরি করে (এটি একটি সাইন ইন অনুরোধ কিভাবে তৈরি করে তাও আপনাকে দেখায়)। তারা অন্য একটি উত্তর থেকে পৃথকভাবে সম্মত হয়: স্ব স্ব স্বাক্ষরিত শংসাপত্রের জন্য ব্যবহৃত DNS নামটি বিষয় বিকল্প বিকল্প (SAN) , এবং সাধারণ নাম নয় (সিএন) নয়

DNS নামগুলি SAN এ কনফিগারেশন ফাইলের মাধ্যমে লাইনের subjectAltName = @alternate_names (কমান্ড লাইনের মাধ্যমে এটি করার কোন উপায় নেই) দিয়ে স্থাপন করা হয়। তারপরে কনফিগারেশন ফাইলের একটি alternate_names বিভাগ আছে (আপনি আপনার স্বাদ অনুসারে এটি সুরক্ষিত করতে হবে):

[ alternate_names ]

DNS.1       = example.com
DNS.2       = www.example.com
DNS.3       = mail.example.com
DNS.4       = ftp.example.com

# Add these if you need them. But usually you don't want them or
#   need them in production. You may need them for development.
# DNS.5       = localhost
# DNS.6       = localhost.localdomain
# DNS.7       = 127.0.0.1

# IPv6 localhost
# DNS.8     = ::1

স্যানে DNS নামটি সনদ করা এবং সিএন নয় কারণ আইটিটিএফ এবং CA / ব্রাউজার ফোরাম উভয় অনুশীলনটি নির্দিষ্ট করে। তারা নির্দিষ্ট করে যে সিএন এর DNS নামগুলি অব্যবহৃত (কিন্তু নিষিদ্ধ নয়)। আপনি যদি সিএন-তে একটি DNS নাম রাখেন তবে এটি CA / B নীতির অধীনে SAN এ অন্তর্ভুক্ত করা আবশ্যক । সুতরাং আপনি বিষয় বিকল্প নাম ব্যবহার এড়াতে পারবেন না।

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

সম্পর্কিত: ব্রাউজার CA / ব্রাউজার ফোরাম নীতি অনুসরণ করুন; এবং আইইটিএফ নীতি নয়। ওপেনএসএসএল (যা সাধারণত আইইটিএফ অনুসরণ করে) দিয়ে তৈরি একটি শংসাপত্রের একটি কারণ কখনও কখনও ব্রাউজারের অধীনে যাচাই করা হয় না (ব্রাউজারগুলি CA / B অনুসরণ করে)। তারা বিভিন্ন মান, তারা বিভিন্ন প্রদানকারী নীতি এবং বিভিন্ন বৈধতা প্রয়োজনীয়তা আছে।

একটি স্ব স্ব স্বাক্ষরিত শংসাপত্র তৈরি করুন ( -x509 বিকল্পের -x509 লক্ষ্য করুন):

openssl req -config example-com.conf -new -x509 -sha256 -newkey rsa:2048 -nodes \
    -keyout example-com.key.pem -days 365 -out example-com.cert.pem

একটি সাইন ইন অনুরোধ তৈরি করুন ( -x509 বিকল্পের অভাব লক্ষ্য করুন):

openssl req -config example-com.conf -new -sha256 -newkey rsa:2048 -nodes \
    -keyout example-com.key.pem -days 365 -out example-com.req.pem

একটি স্বাক্ষরিত শংসাপত্র মুদ্রণ করুন :

openssl x509 -in example-com.cert.pem -text -noout

একটি সাইন ইন অনুরোধ প্রিন্ট করুন :

openssl req -in example-com.req.pem -text -noout

কনফিগারেশন ফাইল ( -config বিকল্পের মাধ্যমে পাস)

[ req ]
default_bits        = 2048
default_keyfile     = server-key.pem
distinguished_name  = subject
req_extensions      = req_ext
x509_extensions     = x509_ext
string_mask         = utf8only

# The Subject DN can be formed using X501 or RFC 4514 (see RFC 4519 for a description).
#   Its sort of a mashup. For example, RFC 4514 does not provide emailAddress.
[ subject ]
countryName         = Country Name (2 letter code)
countryName_default     = US

stateOrProvinceName     = State or Province Name (full name)
stateOrProvinceName_default = NY

localityName            = Locality Name (eg, city)
localityName_default        = New York

organizationName         = Organization Name (eg, company)
organizationName_default    = Example, LLC

# Use a friendly name here because its presented to the user. The server's DNS
#   names are placed in Subject Alternate Names. Plus, DNS names here is deprecated
#   by both IETF and CA/Browser Forums. If you place a DNS name here, then you 
#   must include the DNS name in the SAN too (otherwise, Chrome and others that
#   strictly follow the CA/Browser Baseline Requirements will fail).
commonName          = Common Name (e.g. server FQDN or YOUR name)
commonName_default      = Example Company

emailAddress            = Email Address
emailAddress_default        = [email protected]

# Section x509_ext is used when generating a self-signed certificate. I.e., openssl req -x509 ...
[ x509_ext ]

subjectKeyIdentifier        = hash
authorityKeyIdentifier  = keyid,issuer

# You only need digitalSignature below. *If* you don't allow
#   RSA Key transport (i.e., you use ephemeral cipher suites), then
#   omit keyEncipherment because that's key transport.
basicConstraints        = CA:FALSE
keyUsage            = digitalSignature, keyEncipherment
subjectAltName          = @alternate_names
nsComment           = "OpenSSL Generated Certificate"

# RFC 5280, Section 4.2.1.12 makes EKU optional
#   CA/Browser Baseline Requirements, Appendix (B)(3)(G) makes me confused
#   In either case, you probably only need serverAuth.
# extendedKeyUsage  = serverAuth, clientAuth

# Section req_ext is used when generating a certificate signing request. I.e., openssl req ...
[ req_ext ]

subjectKeyIdentifier        = hash

basicConstraints        = CA:FALSE
keyUsage            = digitalSignature, keyEncipherment
subjectAltName          = @alternate_names
nsComment           = "OpenSSL Generated Certificate"

# RFC 5280, Section 4.2.1.12 makes EKU optional
#   CA/Browser Baseline Requirements, Appendix (B)(3)(G) makes me confused
#   In either case, you probably only need serverAuth.
# extendedKeyUsage  = serverAuth, clientAuth

[ alternate_names ]

DNS.1       = example.com
DNS.2       = www.example.com
DNS.3       = mail.example.com
DNS.4       = ftp.example.com

# Add these if you need them. But usually you don't want them or
#   need them in production. You may need them for development.
# DNS.5       = localhost
# DNS.6       = localhost.localdomain
# DNS.7       = 127.0.0.1

# IPv6 localhost
# DNS.8     = ::1

আপনি ক্রোম জন্য নিম্নলিখিত কাজ করতে হতে পারে। অন্যথায় ক্রোম একটি সাধারণ নামটি অভিযোগ করতে পারে ( ERR_CERT_COMMON_NAME_INVALID ) । আমি এই উদাহরণে SAN এবং একটি CN- এ একটি আইপি ঠিকানা মধ্যে সম্পর্ক কি তা নিশ্চিত নই।

# IPv4 localhost
# IP.1       = 127.0.0.1

# IPv6 localhost
# IP.2     = ::1

X.509 / PKIX শংসাপত্রগুলিতে DNS নামগুলির পরিচালনা সম্পর্কিত অন্যান্য নিয়ম রয়েছে। নিয়ম জন্য এই নথি পড়ুন:

RFC 6797 এবং RFC 7469 তালিকাভুক্ত করা হয়েছে কারণ তারা অন্যান্য RFCs এবং CA / B নথির চেয়ে বেশি বিধিনিষেধযুক্ত। আরএফসি এর 6797 এবং 7469 আইপি ঠিকানার অনুমতি দেয় না


আপনি এক কমান্ডে এটি করতে পারেন:

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365

যদি আপনি পাসফ্রেজ দিয়ে আপনার ব্যক্তিগত কী সুরক্ষিত করতে না চান তবে আপনি অ্যাড- -nodes ( no DES -nodes জন্য ছোট no DES ), অন্যথায় এটি আপনাকে "কমপক্ষে একটি 4 ক্যারেক্টার" পাসওয়ার্ডের জন্য অনুরোধ করবে। দিন প্যারামিটার (365) আপনি মেয়াদ শেষ হওয়ার তারিখ প্রভাবিত করতে যেকোন নম্বর দিয়ে প্রতিস্থাপন করতে পারেন। এটি তখন "দেশ নাম" মতো জিনিসগুলির জন্য আপনাকে প্রম্পট করবে তবে আপনি কেবল এন্টার চাপতে এবং ডিফল্টগুলি গ্রহণ করতে পারেন।

শংসাপত্রের বিষয়বস্তু সম্পর্কে প্রশ্নগুলি -subj '/CN=localhost' Add- -subj '/CN=localhost' (আপনার পছন্দসই ডোমেনের সাথে localhost প্রতিস্থাপন করুন)

স্বেচ্ছায় স্বাক্ষরিত কোনও তৃতীয় পক্ষের সাথে যাচাই করা হয় না যদি না আপনি পূর্বে ব্রাউজারে তাদের আমদানি করেন। যদি আপনার আরো নিরাপত্তা প্রয়োজন হয়, আপনি একটি CA দ্বারা স্বাক্ষরিত একটি সার্টিফিকেট ব্যবহার করা উচিত।


আপনি সাধারণ পদ্ধতি সঠিক আছে। কমান্ডের জন্য সিনট্যাক্স নিচের।

openssl req -new -key {private key file} -out {output file}

যাইহোক, সতর্কতাগুলি প্রদর্শিত হয় কারণ ব্রাউজার একটি পরিচিত শংসাপত্র কর্তৃপক্ষ (CA) এর সাথে শংসাপত্রটি যাচাই করে সনাক্তকরণ করতে সক্ষম হয় নি।

এটি একটি স্ব স্বাক্ষরিত শংসাপত্র হিসাবে কোন CA নেই এবং আপনি নিরাপদে সতর্কতা অবলম্বন করতে এবং এগিয়ে যেতে পারেন। আপনি যদি এমন একটি সত্য শংসাপত্র পেতে চান যা জনসাধারণের ইন্টারনেটে স্বীকৃত হয় তবে প্রক্রিয়াটি নীচের।

  1. একটি ব্যক্তিগত কী জেনারেট করুন
  2. একটি সিএসআর ফাইল তৈরি করার জন্য যে ব্যক্তিগত কী ব্যবহার করুন
  3. সিএইচআর জমা দিন CA (Verisign বা অন্যদের ইত্যাদি)
  4. ওয়েব সার্ভারে CA থেকে প্রাপ্ত শংসাপত্র ইনস্টল করুন
  5. প্রকার শংসাপত্রের উপর নির্ভর করে প্রমাণীকরণ শৃঙ্খলে অন্যান্য শার্ট যোগ করুন

আমার এই পোস্টে এই বিষয়ে আরো বিশদ আছে https://bigthinkingapplied.com/secure-the-connection-installing-certificates-on-3-common-web-servers/


আমি মন্তব্য করতে পারছি না, তাই এটি একটি পৃথক উত্তর হিসাবে রাখব। আমি গৃহীত এক-মাছ ধরার উত্তর দিয়ে কয়েকটি সমস্যা খুঁজে পেয়েছি:

  • এক-মাছ ধরার যন্ত্রটিতে একটি পাসফ্রেজ রয়েছে।
  • এক-মাছ ধরার নৌকা SHA1 ব্যবহার করে যা অনেক ব্রাউজারে কনসোলগুলিতে সতর্কতা ছুঁড়ে ফেলে।

এখানে একটি সরলীকৃত সংস্করণ যা পাসফ্রেজটি সরিয়ে দেয়, সতর্কতাগুলি দমন করতে নিরাপত্তা আপ করে এবং সম্পূর্ণ প্রশ্ন তালিকাটি সরিয়ে দিতে -subj এ গিয়ে মন্তব্যগুলিতে একটি পরামর্শ অন্তর্ভুক্ত করে:

openssl genrsa -out server.key 2048
openssl rsa -in server.key -out server.key
openssl req -sha256 -new -key server.key -out server.csr -subj '/CN=localhost'
openssl x509 -req -sha256 -days 365 -in server.csr -signkey server.key -out server.crt

আপনি প্রয়োজন যাই হোক না কেন ডোমেন সঙ্গে 'localhost' প্রতিস্থাপন করুন। Openssl একটি পাসফ্রেজের জন্য প্রম্পট হিসাবে আপনি প্রথম দুটি কমান্ড এক এক চালানোর প্রয়োজন হবে।

একটি .pem ফাইল মধ্যে দুটি একত্রিত করা:

cat server.crt server.key > cert.pem

এক মাছ ধরার নৌকা FTW। আমি এটা সহজ রাখতে চাই। কেন সব কমান্ড ধারণকারী একটি কমান্ড ব্যবহার করবেন না? আমি কিভাবে এটি পছন্দ করি - এটি একটি x509 শংসাপত্র তৈরি করে এবং এর PEM কী তৈরি করে:

openssl req -x509 \
 -nodes -days 365 -newkey rsa:4096 \
 -keyout self.key.pem \
 -out self-x509.crt \
 -subj "/C=US/ST=WA/L=Seattle/CN=example.com/[email protected]" 

যে একক কমান্ডটি সাধারণত আপনি সার্টিফিকেটের বিশদগুলির জন্য সরবরাহ করা সমস্ত উত্তর ধারণ করে। এই ভাবে আপনি প্যারামিটার সেট এবং কমান্ড চালাতে পারেন, আপনার আউটপুট পেতে পারেন - তারপর কফি জন্য যান।

এখানে আরো <<


স্ব-স্বাক্ষরিত শংসাপত্রগুলিতে SAN (subjectAlNName) সেট করতে স্থানীয় বাক্সগুলিতে আমি এই স্ক্রিপ্টটি ব্যবহার করি।

এই স্ক্রিপ্টটি ডোমেইন নাম (example.com) নেয় এবং একই শংসাপত্রের * .example.com এবং example.com এর জন্য SAN তৈরি করে। নীচের বিভাগ মন্তব্য করা হয়। স্ক্রিপ্টটি নাম দিন (উদাহরণস্বরূপ- generate-ssl.sh ) এবং এটি এক্সিকিউটেবল অনুমতি দিন। ফাইলগুলি স্ক্রিপ্টের মতো একই ডিরেক্টরিতে লেখা হবে।

ক্রোম 58 একটি সন্নিবেশ স্ব স্ব স্বাক্ষরিত শংসাপত্রের মধ্যে SAN সেট করা প্রয়োজন।

#!/usr/bin/env bash

# Set the TLD domain we want to use
BASE_DOMAIN="example.com"

# Days for the cert to live
DAYS=1095

# A blank passphrase
PASSPHRASE=""

# Generated configuration file
CONFIG_FILE="config.txt"

cat > $CONFIG_FILE <<-EOF
[req]
default_bits = 2048
prompt = no
default_md = sha256
x509_extensions = v3_req
distinguished_name = dn

[dn]
C = CA
ST = BC
L = Vancouver
O = Example Corp
OU = Testing Domain
emailAddress = [email protected]$BASE_DOMAIN
CN = $BASE_DOMAIN

[v3_req]
subjectAltName = @alt_names

[alt_names]
DNS.1 = *.$BASE_DOMAIN
DNS.2 = $BASE_DOMAIN
EOF

# The file name can be anything
FILE_NAME="$BASE_DOMAIN"

# Remove previous keys
echo "Removing existing certs like $FILE_NAME.*"
chmod 770 $FILE_NAME.*
rm $FILE_NAME.*

echo "Generating certs for $BASE_DOMAIN"

# Generate our Private Key, CSR and Certificate
# Use SHA-2 as SHA-1 is unsupported from Jan 1, 2017

openssl req -new -x509 -newkey rsa:2048 -sha256 -nodes -keyout "$FILE_NAME.key" -days $DAYS -out "$FILE_NAME.crt" -passin pass:$PASSPHRASE -config "$CONFIG_FILE"

# OPTIONAL - write an info to see the details of the generated crt
openssl x509 -noout -fingerprint -text < "$FILE_NAME.crt" > "$FILE_NAME.info"

# Protect the key
chmod 400 "$FILE_NAME.key"

এই স্ক্রিপ্টটি একটি তথ্য ফাইলও লিখেছে যাতে আপনি নতুন শংসাপত্রটি পরিদর্শন করতে পারেন এবং সানটি সঠিকভাবে সেট করা হয় তা যাচাই করতে পারেন।

                ...
                28:dd:b8:1e:34:b5:b1:44:1a:60:6d:e3:3c:5a:c4:
                da:3d
            Exponent: 65537 (0x10001)
    X509v3 extensions:
        X509v3 Subject Alternative Name: 
            DNS:*.example.com, DNS:example.com
Signature Algorithm: sha256WithRSAEncryption
     3b:35:5a:d6:9e:92:4f:fc:f4:f4:87:78:cd:c7:8d:cd:8c:cc:
     ...

আপনি যদি অ্যাপ্যাচ ব্যবহার করেন তবে আপনি উপরের কনফিগারেশন ফাইলটি এভাবে উল্লেখ করতে পারেন:

<VirtualHost _default_:443>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/htdocs

    SSLEngine on
    SSLCertificateFile path/to/your/example.com.crt
    SSLCertificateKeyFile path/to/your/example.com.key
</VirtualHost>

নতুন শংসাপত্র কার্যকর করার জন্য আপনার অ্যাপাচি (বা Nginx, বা IIS) সার্ভারটি পুনরায় চালু করতে মনে রাখবেন।


২018 সালের মধ্যে, নিম্নলিখিত কমান্ডগুলি আপনার সমস্ত প্রয়োজনীয়তাগুলি সরবরাহ করে, স্যান সহ:

openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes -keyout example.key -out example.crt -extensions san -config <(echo "[req]"; echo distinguished_name=req; echo "[san]"; echo subjectAltName=DNS:example.com,DNS:example.net,IP:10.0.0.1) -subj /CN=example.com

ওপেনএসএল ≥ 1.1.1, এটিকে সংক্ষিপ্ত করা যেতে পারে:

openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes -keyout example.key -out example.crt -subj /CN=example.com -addext subjectAltName=DNS:example.com,DNS:example.net,IP:10.0.0.1

এটা যে একটি সার্টিফিকেট তৈরি করে

  • ডোমেইন example.com এবং example.net (SAN) জন্য বৈধ,
  • এছাড়াও IP ঠিকানা 10.0.0.1 (SAN) জন্য বৈধ,
  • তুলনামূলকভাবে শক্তিশালী (2018 হিসাবে) এবং
  • 3650 দিনের জন্য বৈধ (~ 10 বছর)।

এটি নিম্নলিখিত ফাইল তৈরি করে:

  • ব্যক্তিগত কী: example.key
  • শংসাপত্র: example.crt

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

যেহেতু শংসাপত্রটি স্বাক্ষরযুক্ত এবং ব্যবহারকারীদের দ্বারা স্বীকৃত হতে হবে, তাই এটি একটি সংক্ষিপ্ত মেয়াদ বা দুর্বল ক্রিপ্টো ব্যবহার করার অর্থ অনুভব করে না।

ভবিষ্যতে, আপনি RSA কী এবং sha256 তুলনায় একটি হ্যাশ অ্যালগরিদম শক্তিশালী 4096 বিট ব্যবহার করতে চাইতে পারেন, কিন্তু ২018 সালের মধ্যে এটিগুলি মূল্যবান। সমস্ত আধুনিক ব্রাউজার দ্বারা সমর্থিত হচ্ছে যখন তারা যথেষ্ট শক্তিশালী।

মন্তব্য: তাত্ত্বিকভাবে আপনি -nodes প্যারামিটারটি ছেড়ে যেতে পারেন (যার অর্থ "কোন DES এনক্রিপশন নেই"), -nodes example.key একটি পাসওয়ার্ড দিয়ে এনক্রিপ্ট করা হবে। তবে, এটি প্রায়শই সার্ভারের ইনস্টলেশনের জন্য উপকারী নয়, কারণ আপনাকে সার্ভারেও পাসওয়ার্ডটি সংরক্ষণ করতে হবে, অথবা আপনাকে প্রতিটি রিবুটের উপর ম্যানুয়ালি প্রবেশ করতে হবে।

আরও দেখুন: https://security.stackexchange.com/a/198409/133603 এবং https://unix.stackexchange.com/a/333325/20407


ডেমো ডোজেস এর উত্তরে বর্ণিত বিকল্পগুলি, ডকুমেন্টেশন থেকে আরও বিস্তারিতভাবে বর্ণনা করা হয়েছে:

openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days XXX
req

PKCS # 10 সার্টিফিকেট অনুরোধ এবং সার্টিফিকেট জেনারেটিং ইউটিলিটি।

-x509

এই বিকল্পটি একটি শংসাপত্রের অনুরোধের পরিবর্তে একটি স্ব স্ব স্বাক্ষরিত শংসাপত্র আউটপুট করে। এটি সাধারণত একটি পরীক্ষার শংসাপত্র বা স্ব স্বাক্ষরিত রুট CA জেনারেট করার জন্য ব্যবহৃত হয়।

-newkey arg

এই বিকল্পটি একটি নতুন শংসাপত্র অনুরোধ এবং একটি নতুন ব্যক্তিগত কী তৈরি করে। যুক্তি বিভিন্ন ফর্ম এক লাগে। RSA: nbits , যেখানে nbits বিট সংখ্যা হয়, আকারে একটি RSA কী nbits উত্পন্ন করে।

-keyout filename

এই নতুন তৈরি ব্যক্তিগত প্রাইভেট কী লিখতে ফাইল নাম দেয়।

-out filename

এটি ডিফল্টরূপে লেখার জন্য বা আউটপুট স্ট্যান্ডার্ড আউটপুট আউটপুট ফাইলনাম নির্দিষ্ট করে।

-days n

যখন -5050 বিকল্প ব্যবহার করা হচ্ছে তখন সার্টিফিকেটটি সার্টিফিকেট করার জন্য দিনের সংখ্যা নির্দিষ্ট করে। ডিফল্ট 30 দিন।

-nodes

যদি এই অপশনটি নির্দিষ্ট করা থাকে তবে একটি ব্যক্তিগত কী তৈরি করা হলে এটি এনক্রিপ্ট করা হবে না।

ডকুমেন্টেশন আসলে উপরের তুলনায় আরো বিস্তারিত, আমি শুধু এখানে সংক্ষিপ্ত বিবরণ।







x509certificate