ক্রোম 58 এ কাজ করে এমন ওপেনসেল দিয়ে একটি স্ব-স্বাক্ষরিত শংসাপত্র তৈরি করা


52

ক্রোম 58 এর পরে এটি স্ব-স্বাক্ষরিত শংসাপত্রগুলি আর স্বীকার করে না যা নির্ভর করে Common Name: https://productforums.google.com/forum/#!topic/chrome/zVo3M8CgKzQ ; context-place=topicsearchin/chrome/category $ 3Canary% 7Cort: প্রাসঙ্গিকতা% 7Cspell: মিথ্যা

পরিবর্তে এটি ব্যবহার করা প্রয়োজন Subject Alt Name। আমি স্ব-স্বাক্ষরিত শংসাপত্রটি কীভাবে উত্পন্ন করতে হবে তার এই নির্দেশিকাটি আমি আগে অনুসরণ করে চলেছি : https://devcenter.heroku.com/articles/ssl-certificate-self যা দুর্দান্ত কাজ করেছে কারণ আমি যা করছি তার জন্য ফাইল server.crtএবং server.keyফাইলের প্রয়োজন ছিল । আমার এখন নতুন শংসাপত্রগুলি তৈরি করা দরকার যা এতে অন্তর্ভুক্ত রয়েছে SANতবে আমার চেষ্টা করা Chrome এর সাথে কাজ করে নি 58।

আমি যা করেছি তা এখানে:

আমি কী উত্পন্ন করতে উপরে বর্ণিত হেরোকু নিবন্ধের পদক্ষেপগুলি অনুসরণ করেছি। আমি তখন একটি নতুন ওপেনএসএসএল কনফিগারেশন ফাইল লিখেছি:

[ req ]
default_bits        = 2048
distinguished_name  = req_distinguished_name
req_extensions      = san
extensions          = san
[ req_distinguished_name ]
countryName         = US
stateOrProvinceName = Massachusetts
localityName        = Boston
organizationName    = MyCompany
[ san ]
subjectAltName      = DNS:dev.mycompany.com

তারপরে server.crtনিম্নলিখিত কমান্ডটি দিয়ে উত্পন্ন করুন :

openssl req \
-new \
-key server.key \
-out server.csr \
-config config.cnf \
-sha256 \
-days 3650

আমি একটি ম্যাকে আছি, তাই আমি কীচেইন দিয়ে server.crtফাইলটি খুললাম , এটি আমার সিস্টেম শংসাপত্রগুলিতে যুক্ত করেছি। আমি তারপর এটি সেট Always Trust

SAN মান সেট করার জন্য কনফিগার ফাইলটি ব্যতীত এগুলি হ'ল আমি স্ব-স্বাক্ষরিত শংসাপত্র উত্পন্ন এবং বিশ্বাস করতে Chrome এর পূর্ববর্তী সংস্করণগুলিতে ব্যবহার করেছি similar

তবে এর পরেও আমি ERR_CERT_COMMON_NAME_INVALIDক্রোম 58 এ পেয়েছি the

উত্তর:


61

আমার সমাধান:

openssl req \
    -newkey rsa:2048 \
    -x509 \
    -nodes \
    -keyout server.key \
    -new \
    -out server.crt \
    -subj /CN=dev.mycompany.com \
    -reqexts SAN \
    -extensions SAN \
    -config <(cat /System/Library/OpenSSL/openssl.cnf \
        <(printf '[SAN]\nsubjectAltName=DNS:dev.mycompany.com')) \
    -sha256 \
    -days 3650

স্থিতি: আমার জন্য কাজ করে


2
সাবশেলের দুর্দান্ত ব্যবহার। আমার মনে হয় আপনি এটিকে কিছুটা সহজ করতে পারেন:-config <(cat /System/Library/OpenSSL/openssl.cnf ; printf '[SAN]\nsubjectAltName=DNS:dev.mycompany.com')

1
আমি আর সাবজেক্ট আল্ট নেম ত্রুটিটি পাই না, তবে এখন সাধারণ নাম সম্পর্কে আমি একটি ত্রুটি পেয়েছি এবং ডাউনলোড সার্টটি "সর্বদা বিশ্বাস" এ সেট করে কাজ করে না। কোন চিন্তা? @bcardarella
রাগবার্ট 25'17

2
ক্রোম 59-এ আপডেট করার সাথে শংসাপত্রটি এর মতো একটি ত্রুটি দেখায়: সাইটের শংসাপত্র শৃঙ্খলে (নেট :: ERR_CERT_COMMON_NAME.gVALID) সমস্যা রয়েছে।
দ্য হর্ষ

1
আমি পরিবর্তন dev.company.nameকরতে localhostএবং এই স্থানীয় হোস্ট থেকে স্থানীয় উন্নয়ন সাইটে ভজনা জন্য কাজ করেন। ম্যাকোজে আমাকে কীচেইনে শংসাপত্রও যুক্ত করতে হয়েছিল এবং "সর্বদা বিশ্বাস" এ এসএসএল সেট করতে হয়েছিল।
ড্যানিয়েল এম।

1
এটি এখন পর্যন্ত সবচেয়ে সহজ সমাধান এবং এর জন্য এসএসলকনফের সাথে স্ক্রু করা বা সিএ ইনস্টল করার দরকার নেই।
বিপি

16

উইন্ডোজে, এই স্ক্রিপ্টটিকে আপনার এসএসএল ফোল্ডারে মেকেরইআরটি.ব্যাট হিসাবে সংরক্ষণ করুন। এটি এই ফাইলগুলি তৈরি করবে: example.cnf, example.crt, example.key

@echo off

REM IN YOUR SSL FOLDER, SAVE THIS FILE AS: makeCERT.bat
REM AT COMMAND LINE IN YOUR SSL FOLDER, RUN: makecert
REM IT WILL CREATE THESE FILES: example.cnf, example.crt, example.key
REM IMPORT THE .crt FILE INTO CHROME Trusted Root Certification Authorities
REM REMEMBER TO RESTART APACHE OR NGINX AFTER YOU CONFIGURE FOR THESE FILES

REM PLEASE UPDATE THE FOLLOWING VARIABLES FOR YOUR NEEDS.
SET HOSTNAME=example
SET DOT=com
SET COUNTRY=US
SET STATE=KS
SET CITY=Olathe
SET ORGANIZATION=IT
SET ORGANIZATION_UNIT=IT Department
SET EMAIL=webmaster@%HOSTNAME%.%DOT%

(
echo [req]
echo default_bits = 2048
echo prompt = no
echo default_md = sha256
echo x509_extensions = v3_req
echo distinguished_name = dn
echo:
echo [dn]
echo C = %COUNTRY%
echo ST = %STATE%
echo L = %CITY%
echo O = %ORGANIZATION%
echo OU = %ORGANIZATION_UNIT%
echo emailAddress = %EMAIL%
echo CN = %HOSTNAME%.%DOT%
echo:
echo [v3_req]
echo subjectAltName = @alt_names
echo:
echo [alt_names]
echo DNS.1 = *.%HOSTNAME%.%DOT%
echo DNS.2 = %HOSTNAME%.%DOT%
)>%HOSTNAME%.cnf

openssl req -new -x509 -newkey rsa:2048 -sha256 -nodes -keyout %HOSTNAME%.key -days 3560 -out %HOSTNAME%.crt -config %HOSTNAME%.cnf

13

এখানে আমার জন্য কার্যকর একটি সমাধান রয়েছে:

সিএ কী এবং সার্ট তৈরি করুন

# openssl genrsa -out server_rootCA.key 2048
# openssl req -x509 -new -nodes -key server_rootCA.key -sha256 -days 3650 -out server_rootCA.pem

সার্ভার_রুটসিএ.সিআর.সিএনএফ তৈরি করুন

# server_rootCA.csr.cnf
[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn

[dn]
C=DE
ST=Berlin
L=NeuKoelln
O=Weisestrasse
OU=local_RootCA
emailAddress=ikke@server.berlin
CN = server.berlin

V3.ext কনফিগারেশন ফাইল তৈরি করুন

# v3.ext
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = server.berlin

সার্ভার কী তৈরি করুন

# openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key -config <( cat server_rootCA.csr.cnf )

সার্ভার শংসাপত্র তৈরি করুন

# openssl x509 -req -in server.csr -CA server_rootCA.pem -CAkey server_rootCA.key -CAcreateserial -out server.crt -days 3650 -sha256 -extfile v3.ext

Apache2 সাইট-ফাইল, HTTPS (পোর্ট 443) বিভাগে সার্টিফিকেট এবং কী যুক্ত করুন Add

SSLCertificateFile    /etc/apache2/ssl/server.crt
SSLCertificateKeyFile    /etc/apache2/ssl/server.key

সার্ভার থেকে আপনার মেশিনে সার্ভার_রোটসিএ.পিএম অনুলিপি করুন ..

# scp you@server.berlin:~/server_rootCA.pem .

.. এবং এটি ক্রোমিয়াম ব্রাউজারে যুক্ত করুন

Chromium -> Setting -> (Advanced) Manage Certificates -> Import -> 'server_rootCA.pem'

আপনি সমস্ত কাজ!

পিএস একটি কার্যকরী সিএ এবং সার্ভার শংসাপত্র জুটি তৈরি করার পরিবর্তে (উপরের নির্দেশাবলী অনুসারে) আপনি কেবলমাত্র এইচটিটিপি সার্ভার কনফিগারেশনে এইচএসটিএস শিরোনাম অক্ষম করতে পারবেন। এটি ক্রোমিয়ামকে এইচটিটিপিএস প্রয়োগ করতে বাধা দেবে এবং ব্যবহারকারীদের আপনার কাস্টম সিএ (সার্ভার_রোটসিএ.পিএম) শংসাপত্র না পেয়ে এবং ইনস্টল না করেই "অ্যাডভান্সড click" আপনার। অন্য কথায় - এইচএসটিএস অক্ষম করার কারণে আপনার সাইটটি এইচটিটিপি এবং / অথবা অনিরাপদ এইচটিটিপিএস সংযোগ (সাবধান!) থেকে সর্বজনীনভাবে দেখার অনুমতি দেবে।

অ্যাপাচি 2 এর জন্য সাইট-ফাইল, HTTP (পোর্ট 80) বিভাগে নিম্নলিখিতগুলি যুক্ত করুন

Header unset Strict-Transport-Security
Header always set Strict-Transport-Security "max-age=0;includeSubDomains"

ডেবিয়ান / অ্যাপাচি 2.4 + দেবিয়ান / ক্রোমিয়াম 59 এ পরীক্ষিত

https://ram.k0a1a.net/self-signed_https_cert_after_chrome_58


রুট সিএ কর্তৃপক্ষের রুটে যাওয়া যা পরে পৃথক শংসাপত্রগুলিকে স্বাক্ষর করে আমি ক্রোমকে সম্পূর্ণরূপে প্রমাণীকরণ করতে পারি; আমার কেবলমাত্র একটি একক সার্টি ইনস্টল করার জন্য লোকদের নেওয়া দরকার ছিল এমন সুবিধাও রয়েছে। ধন্যবাদ
জিওফ 16

4
কেউ দয়া করে আমাকে ব্যাখ্যা করতে পারেন কেন এই অঞ্চলে প্রত্যেকে ন্যায়বিচারের -config <( cat server_rootCA.csr.cnf )পরিবর্তে বাশিজম ব্যবহার করে বলে মনে হচ্ছে -config server_rootCA.csr.cnf?
সিজার

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

12

বেশ কয়েকটি দুর্দান্ত উত্তর রয়েছে যা এই কাজটি কীভাবে পাবেন তার উদাহরণ দেয় তবে আপনার প্রয়াসে জিনিসগুলি কোথায় ভুল হয়েছে তা ব্যাখ্যা করে না। ওপেনএসএসএল কিছু সময় বেশ অ-স্বজ্ঞাত হতে পারে তাই এটি চলার পক্ষে উপযুক্ত।

প্রথমে, আলাদাভাবে, ওপেনএসএসএল আপনার কনফিগারেশনে প্রদত্ত কোনও বিশিষ্ট নাম মান অগ্রাহ্য করার জন্য ডিফল্ট। আপনি যদি সেগুলি ব্যবহার করতে চান তবে আপনাকে অবশ্যই 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

2
এটিই একমাত্র ব্যাখ্যা যা আমাকে বুঝতে সহায়তা করেছিল যে কেন শংসাপত্রটি SAN ছাড়াই বেরিয়ে আসে (আমার ক্ষেত্রে, আমাকে কনফিগার ফাইলে x509_ এক্সটেনশনগুলি অন্তর্ভুক্ত করা দরকার)
ড্যানিয়েল বিয়ার্ডসমোর

2

আমার সমাধানটি মূলটিকে openssl.cnfএটির মতোই রাখা এবং ঠিক শেষের দিকে একটি নতুন বিভাগ যুক্ত করা [ cert_www.example.com ]যেখানে www.example.com ওয়েবসাইটটি যেখানে আমি একটি শংসাপত্র তৈরি করতে চাই এবং তাতে subjectAltNameআমার যে প্রয়োজন তা রেখে দেওয়া (এবং আর কিছু). অবশ্যই বিভাগটি যা খুশি নামকরণ করা যেতে পারে।

এর পরে, আমি openssl reqকমান্ডটি আগের মতো চালাতে পারি , কেবল -extensions cert_www.example.comএটির সামগ্রী বাছাইয়ের জন্য যুক্ত করে এবং আমি -subjসরাসরি সমস্ত ডিএন তথ্য যুক্ত করতে যুক্ত করি ।

শংসাপত্রের সামগ্রীটি তৈরির পরে এবং এর আগে ব্যবহারের আগে যাচাই করতে ভুলবেন না openssl x509 -text


1

কনফিগারেশন সহ বাশ স্ক্রিপ্ট বেকড হয়েছে

শেল স্ক্রিপ্ট হিসাবে যা ব্যাশ সহ প্ল্যাটফর্ম জুড়ে কাজ করা উচিত। অনুমান HOSTNAMEশেল জন্য env সেট বা আপনার পছন্দসই, যেমন একটি হোস্টনাম সরবরাহself_signed_cert.sh test

set -e

if [ -z "$1" ]; then
  hostname="$HOSTNAME"
else
  hostname="$1"
fi

local_openssl_config="
[ req ]
prompt = no
distinguished_name = req_distinguished_name
x509_extensions = san_self_signed
[ req_distinguished_name ]
CN=$hostname
[ san_self_signed ]
subjectAltName = DNS:$hostname, DNS:localhost
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = CA:true
keyUsage = nonRepudiation, digitalSignature, keyEncipherment, dataEncipherment, keyCertSign, cRLSign
extendedKeyUsage = serverAuth, clientAuth, timeStamping
"

openssl req \
  -newkey rsa:2048 -nodes \
  -keyout "$hostname.key.pem" \
  -x509 -sha256 -days 3650 \
  -config <(echo "$local_openssl_config") \
  -out "$hostname.cert.pem"
openssl x509 -noout -text -in "$hostname.cert.pem"

উপরের কম-বেশি উপরেরগুলি কমপক্ষে সর্বনিম্ন কনফিগার ফাইলের তথ্য ওপেনএসএল প্রয়োজনীয়তাগুলিকে ইনজেকশন দেয়।

দ্রষ্টব্য, DNS:localhostআরও সহজেই লোকালহোস্টের মাধ্যমে পরীক্ষার অনুমতি দেওয়ার জন্য এসএএন হিসাবে অতিরিক্ত অন্তর্ভুক্ত । আপনি যদি না চান তবে স্ক্রিপ্ট থেকে অতিরিক্ত বিটটি সরান।

ধার

Bcardarella এর উত্তর দুর্দান্ত (মন্তব্য অপ্রতুলতার কারণে আপ / ভোট দিতে পারবেন না)। তবে, উত্তরটি একটি বিদ্যমান ওপেনসেল কনফিগারেশন ফাইল অবস্থান ব্যবহার করে যা প্ল্যাটফর্ম নির্দিষ্ট ... তাই:

আমার জন্য কাজ কর

স্পষ্টতই, আপনার নিজের দেওয়া প্ল্যাটফর্মের জন্য ওপেনসেল কনফিগারেশন ফাইলটি সন্ধান করা এবং সঠিক অবস্থানটির প্রয়োজন হয়।

পরীক্ষা

পরীক্ষার জন্য, test.cert.pemক্রোমের কর্তৃপক্ষগুলিতে আমদানি করুন chrome://settings/certificatesএবং:

openssl s_server -key test.key.pem -cert test.cert.pem -accept 20443 -www &
openssl_pid=$!
google-chrome https://localhost:20443

এবং পরীক্ষার পরে

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