GNU/Linux >> Linux の 問題 >  >> Linux

Apache – * .local Ssl証明書を作成しますか?

*.localWebサイトをhttpsで機能させる単一のSSL証明書を設定しようとしています。すべての.localドメインがローカルマシンを指している。私はウェブサイトを開発するときにこれらを使用します。多くの新機能(ジオロケーション、サービスワーカーなど)にはSSLが必要です。

Chrome / Firefoxの最近のバージョンでは、古い学校の自己署名証明書は機能しなくなったと思います。

これらのガイドを組み合わせて実行した手順は次のとおりです。
https://deliciousbrains.com/https-locally-without-browser-privacy-errors/

https://codeghar.wordpress.com/2008/03/17/create-a-certificate-authority-and-certificates-with-openssl/

https://stackoverflow.com/questions/27294589/creating-self-signed-certificate-for-domain-and-subdomains-neterr-cert-commo

これが私の設定ファイルです:

#..................................
[ ca ]
default_ca = CA_default
[ CA_default ]
dir = /home/*****/Sites/root-ca
serial = $dir/serial
database = $dir/index.txt
new_certs_dir = $dir/certs
certificate = $dir/certs/cacert.pem
private_key = $dir/private/cakey.pem
default_days = 3000
default_md = sha256
preserve = no
email_in_dn = no
nameopt = default_ca
certopt = default_ca
policy = policy_match
copy_extensions = copyall
[ policy_match ]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[ req ]
default_bits = 2048 # Size of keys
default_keyfile = key.pem # name of generated keys
default_md = md5 # message digest algorithm
string_mask = nombstr # permitted characters
distinguished_name = req_distinguished_name
req_extensions = v3_req
[ req_distinguished_name ]
# Variable name Prompt string
#------------------------- ----------------------------------
0.organizationName = Organization Name (company)
organizationalUnitName = Organizational Unit Name (department, division)
emailAddress = Email Address
emailAddress_max = 40
localityName = Locality Name (city, district)
stateOrProvinceName = State or Province Name (full name)
countryName = Country Name (2 letter code)
countryName_min = 2
countryName_max = 2
commonName = Common Name (hostname, IP, or your name)
commonName_max = 64
# Default values for the above, for consistency and less typing.
# Variable name Value
#------------------------ ------------------------------
0.organizationName_default = *****
localityName_default = *****
stateOrProvinceName_default = *****
countryName_default = *****
emailAddress_default = *****
[ v3_ca ]
basicConstraints = CA:TRUE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer:always
subjectAltName       = @alternate_names
[ v3_req ]
subjectKeyIdentifier = hash
basicConstraints     = CA:FALSE
keyUsage             = digitalSignature, keyEncipherment
subjectAltName       = @alternate_names
nsComment            = "OpenSSL Generated Certificate"

[ alternate_names ]

DNS.1       = *.local

最初に新しい認証局を作成します:

openssl req -new -x509 -extensions v3_ca -keyout private/cakey.pem -out certs/cacert.pem -days 3000 -config conf/caconfig.cnf

ここに私の名前として一般名を付けました

Common Name (hostname, IP, or your name) []:Jonathan Hodgson

ファイルcerts/cacert.pem 次に、問題なく機能するクロムの当局にインポートします。

次に、証明書リクエストを作成します:

openssl req -extensions v3_req -new -nodes -out local.req.pem -keyout private/local.key.pem -config conf/caconfig.cnf

ここでは、一般名を* .local

としています。
Common Name (hostname, IP, or your name) []:*.local

次に、リクエストに署名します:

openssl ca -out certs/local.cert.pem  -config conf/caconfig.cnf -infiles local.req.pem

http構成にファイルを追加します:

<VirtualHost *:80>
    ServerName test.local
    ServerAlias *.local
    VirtualDocumentRoot /home/jonathan/Sites/%-2/public_html
    CustomLog /home/jonathan/Sites/access.log vhost_combined
    ErrorLog /home/jonathan/Sites/error.log
</VirtualHost>

<VirtualHost *:443>
    ServerName test.local
    ServerAlias *.local
    VirtualDocumentRoot /home/jonathan/Sites/%-2/public_html
    CustomLog /home/jonathan/Sites/access.log vhost_combined
    ErrorLog /home/jonathan/Sites/error.log
    SSLEngine On
    SSLCertificateFile /home/jonathan/Sites/root-ca/certs/local.cert.pem
    SSLCertificateKeyFile /home/jonathan/Sites/root-ca/private/local.key.pem
</VirtualHost>

apacheを再起動しましたが、まだNET::ERR_CERT_COMMON_NAME_INVALIDを取得しています

これは、自分が行った構成ファイルにsubjectAltNameを追加する必要があるためだという印象を受けました。

別の方法を教えてください。

助けてくれてありがとう

編集

問題はワイルドカードに関係していると思います。 Alternative_namesをexample.localに設定し、リクエストの共通名をexample.localに設定すると、example.localはChromeとFirefoxの両方で安全であると表示されます。

DNS.1をlocalに設定しようとしました およびDNS.2から*.localERR_SSL_SERVER_CERT_BAD_FORMATを取得しました ChromeとSEC_ERROR_REUSED_ISSUER_AND_SERIAL Firefoxで。証明書を生成する前に、シリアルファイルとインデックスファイルを確実にリセットします。

承認された回答:

CSRにSANを追加しました しかし、あなたは caに伝えませんでした CSRからの拡張機能を含める 証明書に。 https://security.stackexchange.com/questions/150078/missing-x509-extensions-with-an-openssl-generated-certificateまたはcaのマニュアルページを参照してください。 ウェブ上のcopy_extensions

編集:あなたも x509_extensionsを指定する必要があります caで config、または同等ですが、コマンドラインオプション-extensionsはあまり便利ではありません 、いずれの場合も、存在するセクションを指しますが、CAに必要な拡張機能が必要ない場合は空にすることができます。 CSRからの拡張のケースを試したことがなかったので、最初は気づきませんでした。 ほとんどのCAにとって非現実的なconfigではありません。 copy_extensionsを指定した場合 none以外 (そしてCSRにはいくつかあります)しかしx509_extensionsを指定しないでください 次にca します 拡張子を証明書に入れますが、しません 拡張機能が存在する場合は、標準(rfc5280など)で必要とされるように、証明書のバージョンをv3に設定します。

関連:GNU画面:切り離されたセッションをstdoutに出力しますか?

これがバグであるかどうかは議論の余地があります。マンページにはx509_extensions/extensionsと書かれています v3設定を制御し、しない copy_extensionsについて同様のことを言う そうではないことを意味しますが、私見では確かに非常に最適ではない機能です。編集:これはバグであり、修正される予定ですが、それまでは回避策を使用してください。https://unix.stackexchange.com/a/394465/59699

を参照してください。

ただし、私のテストでは、これでは実際には問題は解決しませんでした。証明書に*.localがある場合でも SANでおよび CNであり、(現在)それ以外の場合は有効ですが、Firefox(53.0.2)とChrome(59.0.3071.109)は、それぞれSSL_ERROR_CERT_DOMAIN_ERRORとERR_CERT_COMMON_NAME_INVALIDで拒否します。 localを除外していないのではないかと思いました 通常の2+レベルのロジックから、*.example.localを試しました :Chromeはそれを受け入れますが、Firefoxは受け入れません。 *.example.orgも試しました ChromeとIE11の両方がそののように しかし、Firefoxではありません(もちろん、.orgのような実際のTLDで自分自身に名前を割り当てます DNSが機能するはずの方法ではありません。

これは私を立ち往生させています。いくつかの作業で、OpenSSLを作成して、必要なほとんどすべてを含む証明書を生成できますが、FirefoxとChromeが受け入れる 私は知らない。私はそれを調べて、何か見つけたら更新しようとします。

あなたが意味することを願っています *.localを指定しました サーバーCSRのCommonNameとしてのみ使用され、CA(自己署名)証明書の場合は使用されません。 CAとリーフ証明書のサブジェクト名が同じである場合、何も確実に機能しません。編集:編集したQは、それらが正しく異なっていることを確認します。 caで要求される国、州、組織の指定についても言及されていませんが 使用したポリシー。

「自己署名」は芸術用語であり、同じキーで署名されていることを意味します。 。 CA証明書は自己署名されています。サーバー証明書は、独自のキーを使用して自分で署名しますが、ではありません。 自己署名。自己署名証明書の指示を非自己署名証明書に適用しようとすることは、問題の一部でした。

また、Gillesは署名アルゴリズムのmd5について指摘しています。

編集:openssl caのシリアル(およびインデックス)を「リセット」します CA証明書と名前を完全に破棄しない限り、セットアップはお勧めできません。 それらはに使用されました。規格によると、特定のCAは、証明書に同じシリアル値を持つ複数の証明書を発行してはならず、シリアルファイルはopenssl caの方法です。 (また、x509 -req )これを実装します。現在、「実際の」(公開)CAは単純なカウンターを使用していませんが、エントロピーを使用してPKI(google hashclash)への衝突攻撃をブロックしていますが、これはあなたのような個人のCAにとっては問題ではありません。同じシリアル名とCA名の複数の証明書が表示されると、ブラウザ(または他のリライア)が不満を感じることは容易に想像できますが、ブラウザがリーフ証明書を永続的に保存することは期待できません。したがって、古いものと新しいものの両方が表示されます。長時間実行されない限り、1つのプロセス—該当するストアにインポートしない限り、Firefoxを含め、永続的な「例外」にした場合を含みます。

関連:フォルダのアクセス許可に大文字のSがありますか?
Linux
  1. SSLの証明書署名要求(CSR)を生成する方法

  2. SSL証明書をインストールする

  3. 「SSL証明書の種類」

  1. Plesk:SSLインストール

  2. SSL証明書を購入または更新する

  3. リモート証明書の確認 - MySQL

  1. Web証明書のCSRファイルを作成します。

  2. カール:(60)SSL証明書問題:ローカル発行者証明書を取得できませんか?

  3. Curl:証明書の検証を無効にする