Bagaimana cara menggunakan kata sandi non-plainteks untuk pengguna Tomcat?

19

Di Ubuntu 10.04.3 LTS, setelah menginstal Tomcat 6, cara untuk menambahkan akun manajer / admin adalah dengan menambahkan catatan seperti ini ke /etc/tomcat6/tomcat-users.xml:

<role rolename="manager"/>
<role rolename="admin"/>
<user username="user" password="password" roles="manager,admin"/>

Kata sandi itu ada dalam plaintext, dan saya tidak nyaman dengan itu. Apakah ada cara untuk menggunakan sesuatu seperti hash? Jika Anda memiliki solusi non-Ubuntu, saya mungkin bisa menerjemahkannya.

John Whitlock
sumber

Jawaban:

14

Diambil dari halaman ini

  1. tambahkan "digest" atribut pada elemen Anda server.xmldengan algoritma hash sebagai nilai (nilai yang mungkin misalnya md5, sha-1atau sha-256, di mana yang terakhir sangat disarankan).
  2. Lari $CATALINE_HOME/bin/digest.sh -a <YOUR_HASH_ALGORITHM> <YOUR_PASSWORD>
  3. Anda akan mendapatkan output dalam bentuk berikut <YOUR_PASSWORD>:<ENCRYPTED_PASSWORD>
  4. Ganti nilai passwordatribut pengguna di tomcat-users.xmlke Anda<ENCRYPTED_PASSWORD>
  5. restart tomcat

Lihat juga: Tomcat digest password

Alex
sumber
1
+1, tetapi coba di MD5. Gunakan "sha-1"atau "sha-256", jika itu akan berhasil.
Shane Madden
1
Di Tomcat 7 sekarang ada digest.bat di direktori bin untuk melakukan ini. Contoh:digest.bat -a "md5" <YOUR_PASSWORD>
Zasz
1
Ini tidak selesai untuk Tomat 8.5.x. Lihat komentar saya di bawah untuk langkah-langkah lengkap. Anda juga harus memodifikasi ranah Anda di server.xml dan juga dalam metode otentikasi web.xml.
atom88
8

Bagi siapa pun yang datang ke sini mencari informasi tentang Tomcat 8.0.15 atau yang lebih baru, Anda mungkin harus menggunakan SecretKeyCredentialHandler dengan PBKDF2 sebagai gantinya, karena jauh lebih aman (yaitu lebih sulit untuk di-crack) daripada pesan sederhana.

Misalnya, di server Anda.xml:

<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
       resourceName="UserDatabase">
   <CredentialHandler className="org.apache.catalina.realm.SecretKeyCredentialHandler"
                      algorithm="PBKDF2WithHmacSHA512"
                      keyLength="256"
   />
</Realm>

Dengan konfigurasi ini, gunakan yang berikut ini untuk menghasilkan output hash dari kata sandi Anda:

 $CATALINA_HOME/bin/digest.sh -a "PBKDF2WithHmacSHA512" -i 100000 -s 16 -k 256 -h "org.apache.catalina.realm.SecretKeyCredentialHandler" "YOUR_PASSWORD"

dengan jumlah iterasi dan ukuran garam (dalam byte) yang Anda pilih. Perhatikan bahwa panjang kunci harus sama dengan yang didefinisikan di server.xml karena bug 60446 . Namun harus segera diperbaiki di hulu.

PERINGATAN! Harap pastikan kata sandi Anda tidak disimpan dalam riwayat perintah shell Anda. Dalam bash ini dicapai dengan mendahului perintah dengan ruang kosong.

Perintah akan menampilkan kata sandi Anda dalam teks biasa dan representasi hex dari kredensial yang dihasilkan, yang harus Anda gunakan sebagai atribut kata sandi di tomcat-users.xml Anda.

Dokumentasi untuk komponen CredentialHandler dapat ditemukan di sini . Nilai yang mungkin untuk atribut algoritme dapat ditemukan di sini .

Niklas Holm
sumber
0

1) Hasilkan kata sandi: /bin>digest.bat -s 0 -a sha-256

Contoh: /bin>digest.bat -s 0 -a sha-256 admin

Kata sandi yang digunakan adalah: 8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918

* Catatan penting: Anda harus menggunakan "-s 0" (garam 0) atau tidak akan berfungsi.

2) rekatkan kata sandi di atas ke file tomcat-users.xml Anda.

Contoh:

<!-- for password “admin” -->
<user username="tomcat" password="8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918" roles="manager-gui,manager,admin"></user>

3) mengkonfigurasi server.xml untuk menggunakan kata sandi berbasis hash SHA-256 digest:

4) konfigurasikan web.xml Anda untuk menggunakan kata sandi "DIGEST" dan perbarui RealmName agar sesuai dengan di atas (di bagian HTMLManager)

 <catalina_home>/webapps/manager\WEB-INF\web.xml

    <login-config>
        <auth-method>DIGEST</auth-method>
        <realm-name>UserDatabase</realm-name> 
    </login-config>

Full context:
  <servlet>
    <servlet-name>HTMLManager</servlet-name>
    <servlet-class>org.apache.catalina.manager.HTMLManagerServlet</servlet-class>
    <init-param>
      <param-name>debug</param-name>
      <param-value>2</param-value>
    </init-param>

… SNIPPED_FOR_BREVITY ...   

    <login-config>
    <auth-method>DIGEST</auth-method>
    <realm-name>UserDatabase</realm-name>
  </login-config>

    <multipart-config>
      <!-- 50MB max -->
      <max-file-size>52428800</max-file-size>
      <max-request-size>52428800</max-request-size>
      <file-size-threshold>0</file-size-threshold>
    </multipart-config>
  </servlet>
atom88
sumber
Anda bingung DIGEST auth dengan kata sandi hash. Pertanyaannya adalah tentang menggunakan kata sandi hash dengan BASIC auth.
rustyx