আমি কিছু অনুপস্থিত করছি? এটি কি স্ব-স্বাক্ষরিত শংসাপত্র তৈরির সঠিক উপায়?
স্ব-স্বাক্ষরিত শংসাপত্র তৈরি করা সহজ। আপনি কেবল openssl req
কমান্ডটি ব্যবহার করুন । ব্রাউজার এবং কমান্ড লাইন সরঞ্জামগুলির মতো ক্লায়েন্টের বৃহত্তম নির্বাচন দ্বারা গ্রাস করা যেতে পারে এমন একটি তৈরি করা কঠিন।
এটি মুশকিল কারণ ব্রাউজারগুলির নিজস্ব প্রয়োজনীয় সেটগুলির সেট রয়েছে এবং তারা আইইটিএফের তুলনায় আরও প্রতিরোধী । ব্রাউজারগুলি দ্বারা ব্যবহৃত প্রয়োজনীয়তাগুলি সিএ / ব্রাউজার ফোরামে নথিভুক্ত করা হয় (নীচে উল্লেখগুলি দেখুন)। দুটি মূল ক্ষেত্রে এই বিধিনিষেধগুলি দেখা দেয়: (1) আস্থার অ্যাঙ্করগুলি এবং (2) ডিএনএসের নাম।
আধুনিক ব্রাউজারগুলি (আমরা ২০১৪ / ২০১৫ সালে যে ওয়ারেজ ব্যবহার করছি) এমন একটি শংসাপত্র চায় যা কোনও বিশ্বাস নোঙ্গরকে আবার চেইন করে, এবং তারা চায় ডিএনএসের নামগুলি শংসাপত্রের নির্দিষ্ট উপায়ে উপস্থাপন করা। এবং ব্রাউজারগুলি সক্রিয়ভাবে স্ব-স্বাক্ষরিত সার্ভার শংসাপত্রগুলির বিরুদ্ধে চলছে।
কিছু ব্রাউজার হ'ল স্ব-স্বাক্ষরিত সার্ভার শংসাপত্র আমদানি করা সহজ করে না। প্রকৃতপক্ষে, আপনি অ্যান্ড্রয়েডের ব্রাউজারের মতো কিছু ব্রাউজারের সাথে পারবেন না। সুতরাং সম্পূর্ণ সমাধান হ'ল আপনার নিজস্ব কর্তৃপক্ষ হয়ে উঠুন।
আপনার নিজস্ব কর্তৃপক্ষ হওয়ার অনুপস্থিতিতে, আপনাকে শংসাপত্রটি সাফল্যের সর্বাধিক সম্ভাবনা দেওয়ার জন্য ডিএনএসের নামগুলি সঠিকভাবে পেতে হবে। তবে আমি আপনাকে নিজের কর্তৃপক্ষ হতে উত্সাহিত করব। এটি আপনার নিজের কর্তৃপক্ষ হয়ে উঠা সহজ, এবং এটি সমস্ত আস্থার বিষয়গুলিকে পিছনে ফেলে দেবে (নিজের চেয়ে বেশি কে বিশ্বাস করবে?)।
এটি সম্ভবত আপনি খুঁজছেন এমন সাইট নয়!
সাইটের সুরক্ষা শংসাপত্র বিশ্বাসযোগ্য নয়!
এটি কারণ সার্ভার শংসাপত্রগুলি বৈধ করতে ব্রাউজারগুলি বিশ্বাস নোঙ্গরগুলির একটি পূর্বনির্ধারিত তালিকা ব্যবহার করে। একটি স্ব-স্বাক্ষরিত শংসাপত্র কোনও বিশ্বস্ত অ্যাঙ্কারে ফিরে চেইন করে না।
এটি এড়ানোর সর্বোত্তম উপায় হ'ল:
- আপনার নিজস্ব কর্তৃপক্ষ তৈরি করুন (যেমন, সিএ হন )
- সার্ভারের জন্য একটি শংসাপত্র স্বাক্ষর করার অনুরোধ (সিএসআর) তৈরি করুন
- আপনার সিএ কী দিয়ে সার্ভারের সিএসআর সাইন করুন
- সার্ভারে সার্ভার শংসাপত্র ইনস্টল করুন
- ক্লায়েন্টে সিএ শংসাপত্র ইনস্টল করুন
পদক্ষেপ 1 - আপনার নিজস্ব কর্তৃপক্ষ তৈরির অর্থ কেবল স্ব-স্বাক্ষরিত শংসাপত্র তৈরি করা CA: true
এবং সঠিক কী ব্যবহার। এর অর্থ সাবজেক্ট এবং ইস্যুকারী একই সত্তা, বেসিক সীমাবদ্ধতায় সিএ সত্য হিসাবে সেট করা হয় (এটি সমালোচনামূলক হিসাবে চিহ্নিত করা উচিত), কী ব্যবহার keyCertSign
এবং crlSign
(আপনি যদি সিআরএল ব্যবহার করছেন) এবং সাবজেক্ট কী আইডেন্টিফায়ার (এসকেআই) হয় কর্তৃপক্ষ কী সনাক্তকারী (একেআই) এর সমান K
আপনার নিজস্ব শংসাপত্র কর্তৃপক্ষ হতে, দেখুন * আপনি কীভাবে আপনার শংসাপত্র কর্তৃপক্ষের সাথে শংসাপত্র স্বাক্ষর করার অনুরোধটি স্বাক্ষর করবেন? স্ট্যাক ওভারফ্লো তারপরে, ব্রাউজার দ্বারা ব্যবহৃত ট্রাস্ট স্টোরে আপনার সিএ আমদানি করুন।
ধাপ 2 - 4 মোটামুটিভাবে কী আপনি একটি সর্বজনীন সার্ভার যখন তোমার মত সিএ পরিষেবা পক্ষভুক্ত মুখোমুখি জন্য এখন কি Startcom বা CAcert । পদক্ষেপ 1 এবং 5 আপনাকে তৃতীয় পক্ষের কর্তৃত্ব এড়াতে এবং আপনার নিজের কর্তৃত্বের (নিজের চেয়ে বেশি ভাল কে বিশ্বাস করবে?) হিসাবে কাজ করার অনুমতি দেয়।
ব্রাউজার সতর্কতা এড়ানোর পরবর্তী সর্বোত্তম উপায় হ'ল সার্ভারের শংসাপত্রকে বিশ্বাস করা। তবে অ্যান্ড্রয়েডের ডিফল্ট ব্রাউজারের মতো কিছু ব্রাউজার আপনাকে এটি করতে দেয় না। সুতরাং এটি প্ল্যাটফর্মে কখনও কাজ করবে না।
ব্রাউজার (এবং অন্যান্য অনুরূপ ব্যবহারকারী এজেন্ট) ইস্যু না স্ব-স্বাক্ষরিত সার্টিফিকেট নির্ভর থিংস (IOT) ইন্টারনেট একটি বড় সমস্যা হতে যাচ্ছে। উদাহরণস্বরূপ, আপনি যখন আপনার তাপস্থাপক বা রেফ্রিজারেটরের সাথে এটি প্রোগ্রাম করার জন্য সংযুক্ত হন তখন কী ঘটবে? উত্তরটি হ'ল ব্যবহারকারীর অভিজ্ঞতার দিক থেকে ভাল কিছু নয়।
ডাব্লু 3 সি এর ওয়েবঅ্যাপসেক ওয়ার্কিং গ্রুপ বিষয়টি দেখতে শুরু করেছে। উদাহরণস্বরূপ, প্রস্তাব দেখুন: এইচটিটিপিকে অ-সুরক্ষিত হিসাবে চিহ্নিত করা হচ্ছে ।
কীভাবে ওপেনএসএসএল দ্বারা স্ব-স্বাক্ষরিত শংসাপত্র তৈরি করবেন
নীচের কমান্ডগুলি এবং কনফিগারেশন ফাইল একটি স্ব-স্বাক্ষরিত শংসাপত্র তৈরি করে (এটি আপনাকে কীভাবে স্বাক্ষর করার অনুরোধ তৈরি করবেন তা দেখায়)। তারা এক সাথে অন্যান্য জবাব থেকে পৃথক: স্ব স্বাক্ষরিত শংসাপত্রের জন্য ব্যবহৃত ডিএনএস নামগুলি সাবজেক্ট অল্টারনেট নেম (সান) এ থাকে , সাধারণ নাম (সিএন) তে হয় না ।
ডিএনএসের নামগুলি সানটিতে লাইনটির সাথে কনফিগারেশন ফাইলের মাধ্যমে স্থাপন করা হয়েছে 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
# IP.1 = 127.0.0.1
# IP.2 = ::1
ডিএনএসের নামটি এসএন-তে রাখতে হবে এবং সিএন নয়, কারণ আইইটিএফ এবং সিএ / ব্রাউজার ফোরাম উভয়ই অনুশীলনটি নির্দিষ্ট করে। তারা এও নির্দিষ্ট করে যে সিএন-তে ডিএনএসের নামগুলি হ্রাস করা হয়েছে (তবে নিষিদ্ধ নয়)। আপনি যদি সিএন-তে কোনও ডিএনএস নাম রাখেন, তবে অবশ্যই এটি সিএ / বি নীতিমালার অধীনে এসএএন-তে অন্তর্ভুক্ত করা উচিত । সুতরাং আপনি সাবজেক্ট বিকল্প নাম ব্যবহার এড়াতে পারবেন না।
আপনি যদি ডিএনএসের নামগুলি সান-এ রাখেন না, তবে শংসাপত্রটি ব্রাউজার এবং অন্যান্য ব্যবহারকারী এজেন্টগুলির অধীনে যা সিএ / ব্রাউজার ফোরামের নির্দেশিকা অনুসরণ করে যাচাই করতে ব্যর্থ হবে।
সম্পর্কিত: ব্রাউজারগুলি সিএ / ব্রাউজার ফোরাম নীতি অনুসরণ করে; এবং আইইটিএফ নীতিগুলি নয়। ওপেনএসএসএল (যা সাধারণত আইইটিএফ অনুসরণ করে) এর সাথে একটি শংসাপত্র তৈরি করা তার অন্যতম কারণ ব্রাউজারের অধীনে কখনও কখনও বৈধতা দেয় না (ব্রাউজারগুলি সিএ / বি অনুসরণ করে)। তারা বিভিন্ন মান, তাদের বিভিন্ন প্রদানের নীতি এবং বিভিন্ন বৈধতা প্রয়োজনীয়তা আছে।
একটি স্ব স্ব স্বাক্ষরিত শংসাপত্র তৈরি করুন ( -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 it's 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 = test@example.com
# 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
) । স্যানের একটি আইপি ঠিকানা এবং এই সিএনএন-এর মধ্যে সম্পর্ক কী তা আমি নিশ্চিত নই।
# IPv4 localhost
# IP.1 = 127.0.0.1
# IPv6 localhost
# IP.2 = ::1
X.509 / PKIX শংসাপত্রগুলিতে ডিএনএস নামগুলি পরিচালনা করার বিষয়ে অন্যান্য নিয়ম রয়েছে। বিধিগুলির জন্য এই নথিগুলি পড়ুন:
আরএফসি 6797 এবং আরএফসি 7469 তালিকাভুক্ত করা হয়েছে, কারণ তারা অন্যান্য আরএফসি এবং সিএ / বি নথিগুলির চেয়ে বেশি সীমাবদ্ধ। আরএফসি 6797 এবং 7469 কোনও আইপি ঠিকানার অনুমতি দেয় না ।