On Tue, 30 Nov 2021 10:04:30 +0100
Łukasz Moskała <l...@lukaszmoskala.pl> wrote:

> 
> 
> Dnia 30 listopada 2021 09:45:15 CET, Radek <r...@int.pl> napisał/a:
> >On Mon, 29 Nov 2021 11:19:28 +0100
> >Łukasz Moskała <l...@lukaszmoskala.pl> wrote:
> >
> >> W dniu 28.11.2021 o 18:07, Radek pisze:
> >> > Hello,
> >> > following the official guide [1] and few others webites I finally 
> >> > installed my first Ruby on Rails/Puma web app...  and it passed the 
> >> > local test by curl (bundle exec rails server webrick -e production) - 
> >> > relayd wasn't configured yet.
> >> > 
> >> > Then, I ran my app with puma server. I can't figure out how to make it 
> >> > work with FQDN and LetsEncrypt cert.
> >> > My configs seems to be fine. It's 7.0/amd64. I've read [2], [3].
> >> > 
> >> > I started with simple httpd configuration to get certs with acme-clinet 
> >> > and then https://redmine.MY.DOMAIN.COM showed my testing index.html 
> >> > properly.
> >> > Now /etc/httpd.conf has changed but I assume my certs are still OK.
> >> > 
> >> > Remote firefox is giving me a "Redirect Loop" error when trying to 
> >> > access https://redmine.MY.DOMAIN.COM
> >> > 
> >> > Could someone please shed some light on this puzzle?
> >> > 
> >> > 1. https://www.redmine.org/projects/redmine/wiki/RedmineInstall
> >> > 2. https://github.com/basicfeatures/openbsd-rails
> >> > 3. https://gist.github.com/anon987654321/4532cf8d6c59c1f43ec8973faa031103
> >> > 
> >> > $ openssl s_client -connect redmine.MY.DOMAIN.COM:443
> >> > CONNECTED(00000003)
> >> > depth=0 CN = redmine.MY.DOMAIN.COM
> >> > verify error:num=20:unable to get local issuer certificate
> >> > verify return:1
> >> > depth=0 CN = redmine.MY.DOMAIN.COM
> >> > verify error:num=21:unable to verify the first certificate
> >> > verify return:1
> >> > write W BLOCK
> >> > ---
> >> > Certificate chain
> >> >   0 s:/CN=redmine.MY.DOMAIN.COM
> >> >     i:/C=US/O=Let's Encrypt/CN=R3
> >> > ---
> >> > Server certificate
> >> > -----BEGIN CERTIFICATE-----
> >> > [...]
> >> > -----END CERTIFICATE-----
> >> > subject=/CN=redmine.MY.DOMAIN.COM
> >> > issuer=/C=US/O=Let's Encrypt/CN=R3
> >> > ---
> >> > No client certificate CA names sent
> >> > Server Temp Key: ECDH, X25519, 253 bits
> >> > ---
> >> > SSL handshake has read 2403 bytes and written 367 bytes
> >> > ---
> >> > New, TLSv1/SSLv3, Cipher is AEAD-AES256-GCM-SHA384
> >> > Server public key is 4096 bit
> >> > Secure Renegotiation IS NOT supported
> >> > Compression: NONE
> >> > Expansion: NONE
> >> > No ALPN negotiated
> >> > SSL-Session:
> >> >      Protocol  : TLSv1.3
> >> >      Cipher    : AEAD-AES256-GCM-SHA384
> >> >      Session-ID:
> >> >      Session-ID-ctx:
> >> >      Master-Key:
> >> >      Start Time: 1638116582
> >> >      Timeout   : 7200 (sec)
> >> >      Verify return code: 21 (unable to verify the first certificate)
> >> > ---
> >> > 
> >> > 
> >> > [redminepk@@redmine70~/redminepk:]bundle exec pumactl27 --config-file 
> >> > config/puma.rb start
> >> > Puma starting in single mode...
> >> > * Puma version: 5.5.2 (ruby 2.7.4-p191) ("Zawgyi")
> >> > *  Min threads: 0
> >> > *  Max threads: 5
> >> > *  Environment: production
> >> > *          PID: 85983
> >> > * Listening on 
> >> > ssl://127.0.0.1:3000?cert=/etc/ssl/redmine.MY.DOMAIN.COM.crt&key=/etc/ssl/private/redmine.MY.DOMAIN.COM.key&verify_mode=none
> >> > * Listening on http://127.0.0.1:3001
> >> > Use Ctrl-C to stop
> >> > 
> >> > 
> >> > 
> >> > 
> >> > # /home/redminepk/redminepk/config/puma.rb
> >> > #!/usr/bin/env puma
> >> > app = "redminepk"
> >> > ssl_bind "127.0.0.1", "3000", {
> >> >    key: "/etc/ssl/private/redmine.MY.DOMAIN.COM.key",
> >> >    cert: "/etc/ssl/redmine.MY.DOMAIN.COM.crt"
> >> > }
> >> > bind "tcp://127.0.0.1:3001"
> >> > pidfile "/home/#{app}/#{app}/tmp/puma.pid"
> >> > state_path "/home/#{app}/#{app}/tmp/puma.state"
> >> > stdout_redirect "/home/#{app}/#{app}/log/puma_access.log", 
> >> > "/home/#{app}/#{app}/log/puma_errors.log"
> >> > environment "production"
> >> > 
> >> > 
> >> > # /home/redminepk/redminepk/config/environments/production.rb
> >> >     Rails.application.configure do
> >> >     config.cache_classes = true
> >> >     config.eager_load = true
> >> >     config.consider_all_requests_local = false
> >> >     config.action_controller.perform_caching = true
> >> >     config.action_mailer.raise_delivery_errors = false
> >> >     config.action_mailer.logger = nil
> >> >     config.active_support.deprecation = :log
> >> >     config.force_ssl = true
> >> > end
> >> > 
> >> > 
> >> > 
> >> > # /etc/httpd.conf
> >> > ext_if="vmx0"
> >> > types { include "/usr/share/misc/mime.types" }
> >> > server "redmine.MY.DOMAIN.COM" {
> >> >          listen on $ext_if port 80
> >> >          location "/.well-known/acme-challenge/*" {
> >> >          root "/acme"
> >> >          request strip 2
> >> >          }
> >> >          location "*" {
> >> >          block return 302 "https://$HTTP_HOST$REQUEST_URI";
> >> >          }
> >> > }
> >> > 
> >> > 
> >> > # /etc/relayd.conf
> >> > egress="A.B.C.D"
> >> > table <redminepk> { 127.0.0.1 }
> >> > redminepk_port="3001"
> >> > table <httpd> { 127.0.0.1 }
> >> > httpd_port="80"
> >> > http protocol "http" {
> >> >    match request header set "Connection" value "close"
> >> >    match response header remove "Server"
> >> > }
> >> > http protocol "https" {
> >> >    pass request header "Host" value "redmine.MY.DOMAIN.COM" forward to 
> >> > <redminepk>
> >> >    tls keypair "redmine.MY.DOMAIN.COM"
> >> >    # Preserve address headers
> >> >    match request header append "X-Forwarded-For" value "$REMOTE_ADDR"
> >> >    match request header append "X-Forwarded-Port" value "$REMOTE_PORT"
> >> >    match request header append "X-Forwaded-By" value 
> >> > "$SERVER_ADDR:$SERVER_PORT"
> >> >    match request header set "Connection" value "close"
> >> >    match response header remove "Server"
> >> > }
> >> > relay "http" {
> >> >    listen on $egress port http
> >> >    protocol "http"
> >> >    forward to <httpd> port $httpd_port
> >> > }
> >> > relay "https" {
> >> >    listen on $egress port https tls
> >> >    protocol "https"
> >> >    forward to <httpd> port $httpd_port
> >> >    forward to <redminepk> port $redminepk_port
> >> > }
> >> > 
> >> > $ grep relayd /etc/pf.conf
> >> > # Allow relayd(8) redirects
> >> > anchor "relayd/*"
> >> > 
> >> > 
> >> > 
> >> > 
> >> > On Fri, 12 Nov 2021 20:35:45 +0100
> >> > Radek <r...@int.pl> wrote:
> >> > 
> >> >> Hello Werner,
> >> >> thank you for your installation details. I'll give it a try in a few 
> >> >> days.
> >> >>
> >> >> On Thu, 11 Nov 2021 23:57:02 +0800
> >> >> Werner Boninsegna <wer...@dewrico.com> wrote:
> >> >>
> >> >>> Hello Radek,
> >> >>>
> >> >>> I am running Redmine on OpenBSD 6.8 and I just followed the 
> >> >>> installation
> >> >>> instructions posted on the Redmine page which are quite complete:
> >> >>>
> >> >>> https://www.redmine.org/projects/redmine/wiki/Installation_Guide
> >> >>>
> >> >>> I installed Postgres and Ruby+Dependencies from the OpenBSD packages.
> >> >>>
> >> >>> Werner
> >> >>>
> >> >>> On 11/10/21 00:56, Radek wrote:
> >> >>>
> >> >>>    Hi @misc,
> >> >>>    Does anyone successfully run redmine[1] on OpenBSD?
> >> >>>    I'd like to install redmine on 7.0/amd64 with httpd and postgresql. 
> >> >>> I've never done it before so any advices and hints would be 
> >> >>> appreciated.
> >> >>>    There isn't much up to date info in google about it[2][3].
> >> >>>    
> >> >>>    1.   https://www.redmine.org/  2.   
> >> >>> https://www.redmine.org/boards/2/topics/496  3.   
> >> >>> https://web.archive.org/web/20160406041905/http://www.iwebdev.it/blog/?p=229
> >> >>>    Thank you!
> >> >>
> >> >>
> >> >> -- 
> >> >> Radek
> >> >>
> >> > 
> >> > 
> >> Hi,
> >> I have never used relayd (only haproxy), so some things that I say may 
> >> be wrong. Sorry about that in advance.
> >> 
> >> First of all, what's the point of passing http via relayd?
> >> 
> >> Now, going back to your issue,why do you have
> >>  >forward to <httpd> port $httpd_port
> >> in relay "https" ?
> >> 
> >> It looks like relayd may put those requests to httpd, which will 
> >> redirect them to https.
> >> 
> >> So, I'd start looking at httpd and puma logs, to check to which daemon 
> >> the requests are actually being sent to.
> >> 
> >> And, if i'm wrong, and requests are going to puma (or whatever is 
> >> listening on 3001), then most likely puma is trying to redirect users to 
> >> https. Possibly because of this line:
> >>  >config.force_ssl = true
> >> 
> >> Also, in this case you may try setting header x-forwarded-proto to 
> >> https, but I don't know if puma will actually use it.
> >> 
> >> 
> >> Let us know if that worked.
> >> 
> >> Kind regards,
> >> -- 
> >> Łukasz Moskała
> >Hello Łukasz, 
> >
> >> First of all, what's the point of passing http via relayd?
> >I used to think that all http and https traffic have to be passed via relayd 
> >if relayd is started. 
> >I have never used relayd before.
> >
> >> Now, going back to your issue,why do you have
> >>  >forward to <httpd> port $httpd_port
> >> in relay "https" ?
> >I think it was pasted there by mistake. I removed this line.
> >
> >> So, I'd start looking at httpd and puma logs, to check to which daemon 
> >> the requests are actually being sent to.
> >Unfortunately, there is nothing in httpd and puma logs. 
> >The only logs I have are from relayd (-dvv):
> >relay https, tls session 1 established (1 active)
> >relay_tls_transaction: session 2: scheduling on EV_READ
> >relay https, tls session 2 established (1 active)
> >relay_tls_transaction: session 3: scheduling on EV_READ
> >relay https, tls session 3 established (1 active)
> >[...]
> >
> >> And, if i'm wrong, and requests are going to puma (or whatever is 
> >> listening on 3001), then most likely puma is trying to redirect users to 
> >> https. Possibly because of this line:
> >>  >config.force_ssl = true
> >I suppose it should work this way but I don't know what actually is going on 
> >there between puma and relayd.
> >
> >> Also, in this case you may try setting header x-forwarded-proto to 
> >> https, but I don't know if puma will actually use it.
> >If the below syntax is correct this option doesn't make any change.
> >match request header set "X-Forwaded-Proto" value "$SERVER_PORT"
> >
> >
> 
> Now, if I think about it again, you can run tcpdump on lo0, and hopefully see 
> what is going on.
> 
> Also, I feel like in your case, relayd is unnecessary here, as you can run 
> httpd on port 80, for redirecting to https and acme, and then run puma on 
> port 3000, and use pf to NAT traffic coming on vmx0 to EXT_IP port 443 to 
> 127.0.0.1 port 3000.
> 
> It would look more or less like this (typing on phone from memory, may not be 
> exactly correct):
> pass in quick on vmx0 inet proto tcp from any to $EXT_IP rdr-to 127.0.0.1:3000
> 
> This way http requests will still be served by httpd, and https requests will 
> go straight to puma.
> 
> I don't think you need to enable ip forwarding for that, but you can try it 
> if it doesn't work.
> 
> also, you can try going to https://EXT_IP:3000 and http://EXT_IP:3001, to see 
> what will happen. curl -v will probably show more than browsers.
> 
> --
> Łukasz Moskała

I care about configuring it with relayd. It's a good opportunity to learn this 
field.
If I can't handle it I will try redirecting 443 to puma/localhost with httpd 
and PF.

Going back to case with enabled relayd..
curl -v https://redmine.MY.DOMAIN.COM shows:
* Expire in 0 ms for 6 (transfer 0x5654a296bfb0)
* Expire in 1 ms for 1 (transfer 0x5654a296bfb0)
[...]
* Expire in 15 ms for 1 (transfer 0x5654a296bfb0)
* Expire in 50 ms for 1 (transfer 0x5654a296bfb0)
*   Trying A.B.C.D...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x5654a296bfb0)
* Connected to redmine.MY.DOMAIN.COM (A.B.C.D) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: none
  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (OUT), TLS alert, unknown CA (560):
* SSL certificate problem: unable to get local issuer certificate
* Closing connection 0
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.haxx.se/docs/sslcerts.html

tcpdump -i lo0 shows nothing


relayd -dvv shows:
relay_tls_transaction: session 5: scheduling on EV_READ
relay_close: sessions inflight decremented, now 0


-- 
Radek

Reply via email to