বেশ কয়েকটি দুর্দান্ত উত্তর রয়েছে যা এই কাজটি কীভাবে পাবেন তার উদাহরণ দেয় তবে আপনার প্রয়াসে জিনিসগুলি কোথায় ভুল হয়েছে তা ব্যাখ্যা করে না। ওপেনএসএসএল কিছু সময় বেশ অ-স্বজ্ঞাত হতে পারে তাই এটি চলার পক্ষে উপযুক্ত।
প্রথমে, আলাদাভাবে, ওপেনএসএসএল আপনার কনফিগারেশনে প্রদত্ত কোনও বিশিষ্ট নাম মান অগ্রাহ্য করার জন্য ডিফল্ট। আপনি যদি সেগুলি ব্যবহার করতে চান তবে আপনাকে অবশ্যই prompt = no
আপনার কনফিগারেশনে যুক্ত করতে হবে । তদতিরিক্ত, কেবল লিখিত হিসাবে কমান্ডটি একটি শংসাপত্রের অনুরোধ উত্পন্ন করে
একটি শংসাপত্র নিজেই নয়, সুতরাং -days
আদেশটি কিছুই করে না।
আপনি এই আদেশটি দিয়েছিলেন এবং ফলাফলটি পরীক্ষা করে এই আদেশটি ব্যবহার করে যদি আপনার শংসাপত্রের অনুরোধ উত্পন্ন করে তবে সাবজেক্ট আল্ট নেম উপস্থিত রয়েছে:
$ openssl req -new -key server.key -out server.csr -config config.cnf -sha256
$ openssl req -text -noout -in server.csr
Certificate Request:
Data:
Version: 1 (0x0)
Subject: C = US, ST = Massachusetts, L = Boston, O = MyCompany
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
...
Exponent: 65537 (0x10001)
Attributes:
Requested Extensions:
X509v3 Subject Alternative Name:
DNS:dev.mycompany.com
Signature Algorithm: sha256WithRSAEncryption
...
তবে আপনি যদি হিরকু লিঙ্কে কমান্ডটি ব্যবহার করে শংসাপত্র তৈরি করেন এবং ফলাফলটি পরীক্ষা করেন, সাবজেক্ট আল্ট নেমটি অনুপস্থিত:
$ openssl x509 -req -sha256 -days 365 -in server.csr -signkey server.key -out server.crt
$ openssl x509 -text -noout -in server.crt
Certificate:
Data:
Version: 1 (0x0)
Serial Number:
89:fd:75:26:43:08:04:61
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = US, ST = Massachusetts, L = Boston, O = MyCompany
Validity
Not Before: Jan 21 04:27:21 2018 GMT
Not After : Jan 21 04:27:21 2019 GMT
Subject: C = US, ST = Massachusetts, L = Boston, O = MyCompany
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
...
Exponent: 65537 (0x10001)
Signature Algorithm: sha256WithRSAEncryption
...
কারণটি হ'ল ডিফল্টরূপে ওপেনএসএসএল অনুরোধ থেকে শংসাপত্রটিতে এক্সটেনশনগুলি অনুলিপি করে না। সাধারণত, কোনও গ্রাহকের অনুরোধের ভিত্তিতে একটি সিএ দ্বারা শংসাপত্র তৈরি / স্বাক্ষরিত হবে এবং কিছু এক্সটেনশানগুলি অনুরোধে সংজ্ঞায়িত এক্সটেনশানগুলিকে অন্ধভাবে বিশ্বাস করতে চাইলে সিএ ইচ্ছার চেয়ে শংসাপত্রকে আরও বেশি ক্ষমতা দিতে পারে।
এক্সটেনশানগুলি অনুলিপি করতে ওপেনএসএসএলকে বলার উপায় রয়েছে, তবে আপনি শংসাপত্র তৈরি করার সময় কোনও কনফিগার ফাইলে এক্সটেনশন সরবরাহ করার চেয়ে আইএমএইচও এটি আরও কাজ।
আপনি যদি আপনার বিদ্যমান কনফিগারেশন ফাইলটি ব্যবহার করার চেষ্টা করছেন, এটি কাজ করবে না কারণ শীর্ষ স্তরের বিভাগ চিহ্নিত করা হয়েছে [req]
তাই সেগুলি সেটিংস কেবল রে50 কমান্ডে প্রয়োগ হয় x509 কমান্ড নয়। শীর্ষ-স্তরের বিভাগ চিহ্নিতকারী থাকা প্রয়োজন নেই, সুতরাং আপনি কেবল সেই প্রথম লাইনটি সরিয়ে ফেলতে পারেন, এবং তারপরে এটি উত্পন্ন অনুরোধ বা শংসাপত্র উভয়ের জন্যই দুর্দান্ত কাজ করবে।
$ openssl x509 -req -sha256 -days 365 -in server.csr -signkey server.key -out server.crt -extfile config.cnf
বিকল্পভাবে, আপনি প্রথমে অনুরোধ এবং তারপরে একটি শংসাপত্র তৈরির পরিবর্তে একক কমান্ডে স্ব-স্বাক্ষরিত শংসাপত্র তৈরি -x509
করতে req
কমান্ডের যুক্তিটি ব্যবহার করতে পারেন । সেক্ষেত্রে [req]
বিভাগ লাইনটি অপসারণ করা প্রয়োজন হবে না
, কারণ বিভাগটি রিক কমান্ডটি পড়ে এবং ব্যবহার করা হয়।
$ openssl req -x509 -sha256 -days 365 -key server.key -out server.crt -config config.cnf
পুনর্নির্মাণের জন্য, উপরের কমান্ডগুলিতে ব্যবহৃত পরিবর্তিত কনফিগারেশন ফাইলটি এখানে রয়েছে:
default_bits = 2048
distinguished_name = dn
x509_extensions = san
req_extensions = san
extensions = san
prompt = no
[ dn ]
countryName = US
stateOrProvinceName = Massachusetts
localityName = Boston
organizationName = MyCompany
[ san ]
subjectAltName = DNS:dev.mycompany.com
-config <(cat /System/Library/OpenSSL/openssl.cnf ; printf '[SAN]\nsubjectAltName=DNS:dev.mycompany.com')