سؤال

لدي خادم Apache Tomcat 6.x قيد التشغيل بشهادة SSL الموقعة ذاتيا. أريد أن يقدم العميل شهادته الخاصة إلى الخادم حتى أتمكن من مصادقةهم بناء على قاعدة بيانات للمستخدمين. لدي كل شيء يعمل على سبيل المثال، لقد وجدت عبر الإنترنت، لكن المثال جاء مع شهادات معلبة وقضيب DataStore المسبق. أريد إنشاء مؤشر البيانات الخاصة بي مع شهيرتي الخاصة ولكن لا حظ.

كيف يمكنني إنشاء Datastore for Tomcat؟
كيف يمكنني إنشاء شهادة توقيع ذاتي ل Tomcat؟

كيف يمكنني إنشاء شهادة موقعة ذاتية للعميل؟
كيف أجبر Tomcat على الثقة بتوقيع العميل؟

لقد كنت ألعب مع Java Keytool لعدة ساعات الآن.

هل كانت مفيدة؟

المحلول

أخيرا حصلت على الحل لمشكلتي، لذلك سوف نشر النتائج هنا إذا كان أي شخص آخر عالق.

بفضل مايكل مارتن من مايكل أفكار البرمجيات و rathblings اكتشفت أن:

Keytool بشكل افتراضي يستخدم خوارزمية DSA عند إنشاء CERT الموقعة ذاتيا. قبلت الإصدارات السابقة من فايرفوكس هذه المفاتيح دون مشكلة. مع Firefox 3 Beta 5، باستخدام DSA لا يعمل، ولكن استخدام RSA يفعل. تمرير "-KEYALG RSA" عند إنشاء الشهادة المذكورة ذاتيا بإنشاء مركز يقبل Firefox 3 Beta 5 بالكامل.

أنا ببساطة اضبط هذا العلم، وتطهير كل مخابئ في فايرفوكس وعملت مثل سحر! أنا أستخدم هذا كإعداد اختبار لمشروعي وأحتاج إلى مشاركة هذا مع أشخاص آخرين، لذلك كتبت النصي دفعة صغيرة يخلق شهادات SSL. يمكن إسقاط المرء في إعداد Tomcat والآخر هو ملف .p12 الذي يمكن استيراده إلى Firefox / IE. شكرا!

الاستعمال: أول وسيطة لسطر الأوامر هي اسم المستخدم للعميل. جميع كلمات المرور هي "كلمة المرور" (بدون اقتباسات). قم بتغيير أي من البتات المشفوفة الثابت لتلبية احتياجاتك.

@echo off
if "%1" == "" goto usage

keytool -genkeypair -alias servercert -keyalg RSA -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=US" -keypass password -keystore server.jks -storepass password
keytool -genkeypair -alias %1 -keystore %1.p12 -storetype pkcs12 -keyalg RSA -dname "CN=%1,OU=Unit,O=Organization,L=City,S=State,C=US" -keypass password -storepass password
keytool -exportcert -alias %1 -file %1.cer -keystore %1.p12 -storetype pkcs12 -storepass password
keytool -importcert -keystore server.jks -alias %1 -file %1.cer -v -trustcacerts -noprompt -storepass password
keytool -list -v -keystore server.jks -storepass password
del %1.cer
goto end

:usage
echo Need user id as first argument: generate_keystore [username]
goto end

:end
pause

النتائج هي ملفان. واحد يسمى server.jks التي تسقط في tomcat وملف آخر يسمى {username} .p12 التي تستوردها في متصفحك. يحتوي ملف Server.jks على شهادة العميل المضافة كمركزي موثوق به.

آمل أن يجد شخص آخر هذا مفيدا.

وهنا هو XML الذي يجب إضافته إلى ملف Tomcat Conf / Sever.xml الخاص بك (تم اختباره فقط على Tomcat 6.x)

<Connector
   clientAuth="true" port="8443" minSpareThreads="5" maxSpareThreads="75"
   enableLookups="true" disableUploadTimeout="true"
   acceptCount="100" maxThreads="200"
   scheme="https" secure="true" SSLEnabled="true"
   keystoreFile="${catalina.home}/conf/server.jks"
   keystoreType="JKS" keystorePass="password"
   truststoreFile="${catalina.home}/conf/server.jks"
   truststoreType="JKS" truststorePass="password"
   SSLVerifyClient="require" SSLEngine="on" SSLVerifyDepth="2" sslProtocol="TLS"
/>

ل Tomcat 7:

<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
           port="8443" SSLEnabled="true"
           maxThreads="200" scheme="https" secure="true"
           keystoreFile="${catalina.base}/conf/server.jks" keystorePass="password"
           clientAuth="false" sslProtocol="TLS" />    

نصائح أخرى

لتمكين مصادقة العميل، تحتاج إلى تحديد "متجر ثقة" ل Tomcat: متجر رئيسي يحتوي على شهادات من سلطات شهادات الجذر التي تثق بها، يتم وضع علامة عليه كله كموثقة ".

هذا محدد من قبل Connector سمات العنصر: truststoreFile, truststorePass (التي الافتراضية لقيمة keystorePass)، و truststoreType (التي الافتراضية إلى "jks").

إذا كان العميل يستخدم شهادة موقعة ذاتيا، فإن علامة المرجع المصدق "الجذر" هي الشهادة نفسها؛ يتبع ذلك، إذن، تحتاج إلى استيراد الشهادة الموقعة ذاتية العميل في متجر Tomcat Trust.

إذا كان لديك العديد من العملاء، فسيصبح هذا بسرعة متاعب. في هذه الحالة، قد ترغب في النظر في توقيع شهادات لعملائك. جاوة keytool لا يمكن للأمر القيام بذلك، ولكن كل الأدوات المساعدة سطر الأوامر اللازمة متوفرة في OpenSSL. أو يمكنك النظر في شيء مثل EJBCA. على نطاق واسع.

الأفضل من ذلك، اطلب من عملائك استخدام كاليفورنيا المجانية الحالية، مثل startcom.org.. وبعد هذا لا يعمل دائما لشهادات الخادم، لأنه لم يتم تضمين شهادة StartCom في جميع المتصفحات، ولكن يتم عكس هذا الوضع، ويمكن بسهولة استيراد شهادة جذر StartCom بسهولة إلى متجر Tomcat Trust Store.

إنشاء شهادة:

keytool -genkey -alias tomcat -keyalg RSA -keystore /home/bob/mykeystore

أدخل جميع البيانات للحصول على شهادة التوقيع الذاتي الذي تحتاجه ثم تحرير Tomcat server.xml وحدد خصائص KEYSTORE على موصل SSL، على سبيل المثال:

<Connector port="8443" maxHttpHeaderSize="8192"
        maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
        enableLookups="false" disableUploadTimeout="true"
        acceptCount="100" scheme="https" secure="true"
        keystoreFile="/home/bob/mykeystore"
        clientAuth="false" sslProtocol="TLS" />

أو اتبع مستندات Tomcat ...

http://tomcat.apache.org/tomcat-6.0-doc/sl-howto.html.

الإجابات السابقة مفيدة بالنسبة لي، ولكن ليس لديك إصدار أداة قذيفة. لذلك كتبت واحدة.

key_gen.sh:

#! /bin/bash
# a key generator for https,

basename=server
key_algorithm=RSA
password_key=123456
password_store=123456
country=US

# clean - pre
rm "${basename}.jks"

# generate server side
keytool -genkeypair -alias "${basename}cert" -keyalg $key_algorithm -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=${country}" -keypass $password_key -keystore "${basename}.jks" -storepass $password_store

بالنسبة tomcat8, ، يمكن أن تضيف بعد التكوين إلى server.xml:

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
        maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
        clientAuth="false" sslProtocol="TLS"
        acceptCount="75" keystoreFile="${catalina.home}/conf/server.jks" keystorePass="123456"
    />
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top